如何修剪字符串中的空格?

新手上路,请多包涵

我正在为 J2ME 应用程序编写此函数,因此我没有一些更高级/现代的 Java 类可用。我得到 java.lang.ArrayIndexOutOfBoundsException 对此。所以,显然它要么不喜欢我初始化 newChars 数组的方式,要么我在调用 System.arraycopy 时没有做正确的事情。

 /*
 * remove any leading and trailing spaces
 */
public static String trim(String str) {
    char[] chars = str.toCharArray();
    int len = chars.length;
    // leading
    while ( (len > 0 ) && ( chars[0] == ' ' ) ) {
        char[] newChars = new char[] {}; // initialize empty array
        System.arraycopy(chars, 1, newChars, 0, len - 1);
        chars = newChars;
        len = chars.length;
    }
    // TODO: trailing
    return chars.toString();
}

原文由 user458442 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 250
1 个回答

修剪前导和尾随空格的简单方法是调用 String.trim() 。对于 Java 11 及更高版本,您还可以使用 String.strip() 它对“空白”的含义1使用了不同的解释。

如果您只想修剪前导和尾随空格(而不是所有前导和尾随空格),有一个名为 StringUtils.strip(String, String) 的 Apache 通用方法可以做到这一点;用 " " 作为第二个参数调用它。

您尝试的代码有许多错误,并且从根本上讲效率低下。如果你真的想自己实现这个,那么你应该:

  1. 计算前导空格字符
  2. 计算尾随空格字符
  3. 如果任一计数不为零,请调用 String.substring(from, end) 创建一个包含您要保留的字符的新字符串。

这种方法避免复制任何字符2 。


1 - 不同的含义在各自的 javadoc 中有解释。或者,阅读 Difference between String trim() and strip() methods in Java 11 的答案。

2 - 实际上,这取决于 String 的实施。对于某些实现,将不会进行复制,而对于其他实现,则会生成一个副本。但这两种方法都是对您的方法的改进,它至少需要 2 个副本,如果有任何字符需要修剪,则需要更多副本。

原文由 Stephen C 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题