如何在字符串每个'-'前添加'+'?现有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"
原代码的错误点
你提供的代码存在三个核心问题:
- 丢失'-'字符:使用
p.substring(i+1)跳过了当前位置的'-',相当于把'-'直接替换成了'+',而非在它前面添加'+'。 - 索引错位:每次修改
temp后,后续循环仍基于原字符串p的索引,但temp长度已增加,导致位置判断完全错误。 - 拼接效率低下:直接用
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
相关产品推荐
相关产品推荐

