You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在字符串每个'-'前添加'+'?现有Java代码存在替换错误

修正Java代码实现给非开头'-'前添加'+'的需求

需求说明

给定一个字符串,需要在非开头的每个'-'字符前添加一个'+'字符:

  • 示例1:输入 "5x^6+3x-8x^2-8x^3" → 输出 "5x^6+3x+-8x^2+-8x^3"
  • 示例2:输入 "-5.0x^4-1.0x^3-3.0x^2-2.0" → 输出 "-5.0x^4+-1.0x^3+-3.0x^2+-2.0"

原代码的错误点

你提供的代码存在三个核心问题:

  1. 丢失'-'字符:使用 p.substring(i+1) 跳过了当前位置的'-',相当于把'-'直接替换成了'+',而非在它前面添加'+'。
  2. 索引错位:每次修改temp后,后续循环仍基于原字符串p的索引,但temp长度已增加,导致位置判断完全错误。
  3. 拼接效率低下:直接用String拼接会频繁生成新对象,既影响性能也容易出错。

修正方案

方案1:使用StringBuilder(推荐,直观灵活)

StringBuilder是可变字符串类,适合插入、修改操作,避免String拼接的性能问题:

String p = "-5.0x^4-1.0x^3-3.0x^2-2.0";
StringBuilder sb = new StringBuilder(p);

// 从索引1开始遍历,跳过字符串开头的字符(避免给开头的'-'加'+')
for (int i = 1; i < sb.length(); i++) {
    if (sb.charAt(i) == '-') {
        // 在当前'-'的前面插入'+'
        sb.insert(i, '+');
        // 插入后字符串长度+1,跳过下一个位置避免重复处理
        i++;
    }
}

String result = sb.toString();
System.out.println(result); // 输出:-5.0x^4+-1.0x^3+-3.0x^2+-2.0

方案2:使用正则表达式(简洁高效)

利用正则的负向预查匹配非开头的'-',直接替换为"+-":

String p = "-5.0x^4-1.0x^3-3.0x^2-2.0";
// (?<!^) 表示匹配的'-'前面不是字符串开头
String result = p.replaceAll("(?<!^)-", "+-");
System.out.println(result); // 输出:-5.0x^4+-1.0x^3+-3.0x^2+-2.0

两种方案对比

  • StringBuilder:逻辑直观,适合需要自定义遍历规则的复杂场景,易于调试。
  • 正则表达式:代码极简,一行完成,适合简单的替换需求,但需要熟悉正则语法。

内容的提问来源于stack exchange,提问作者roi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 18:40:25