Java字符串去空格方法失效,求排查及解决方案
问题排查:你的Java去空格方法失效的原因
嘿,我来帮你看看为什么你的normalizza方法没法正确去除字符串末尾的空格。咱们先拆解当前代码的问题,再给出靠谱的修复方案。
现有方法的核心漏洞
你的方法逻辑存在明显问题,没法处理多个连续末尾空格的场景,具体分析如下:
public static String normalizza(String x) { for (int i = x.length(); i > 0; i--) { if (x.substring(i, x.length()).equalsIgnoreCase(" ")) { x = x.substring(0, i); } } return x; }
- 你判断的是从索引
i到末尾的子串是否等于单个空格" "。如果字符串末尾有多个空格(比如"Rossi "),当i指向倒数第二个字符时,子串是" ",和单个空格不相等,所以不会触发截断操作。最终只能去掉最后一个空格,剩下的空格依然留在字符串里,导致后续定位Iscritto对象失败。 - 另外,
equalsIgnoreCase(" ")完全是多余的——空格字符没有大小写之分,这个判断不会带来任何好处,反而会稍微影响性能。
修复方案
根据你的需求(去除从随机文件读取的字符串末尾空格,用于定位对象),这里有两种可靠的修复方式:
方案1:手动实现末尾空格去除逻辑(兼容所有Java版本)
这种方式从字符串末尾往前遍历,找到第一个非空格字符的位置,然后截取到该位置,确保所有末尾空格都被去除:
public static String normalizza(String x) { // 从最后一个字符开始往前找 int lastNonSpaceIndex = x.length() - 1; // 跳过所有末尾的空格 while (lastNonSpaceIndex >= 0 && x.charAt(lastNonSpaceIndex) == ' ') { lastNonSpaceIndex--; } // 如果字符串全是空格,返回空串;否则截取到最后一个非空格字符 return lastNonSpaceIndex < 0 ? "" : x.substring(0, lastNonSpaceIndex + 1); }
方案2:利用Java内置方法(Java 11+)
如果你使用的是Java 11或更高版本,可以直接用String.stripTrailing()方法,它专门用于去除字符串末尾的所有空白字符(包括空格、制表符等),代码简洁高效:
public static String normalizza(String x) { return x.stripTrailing(); }
额外说明
如果你的需求是同时去除字符串首尾的空格,那可以用:
x.trim():兼容所有Java版本,去除首尾的ASCII空白字符x.strip():Java 11+,支持去除Unicode标准下的所有空白字符
这样修改后,你的方法就能正确去除空格,从而准确定位Iscritto对象的位置了。
内容的提问来源于stack exchange,提问作者riki
相关产品推荐
相关产品推荐

