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

2022-09-01 11:28:14

我正在为J2ME应用程序编写此函数,因此我没有一些更高级/现代的Java类可供我使用。我正在接受这个。因此,显然它要么不喜欢我初始化数组的方式,要么我在调用时没有正确执行某些操作。java.lang.ArrayIndexOutOfBoundsExceptionnewCharsSystem.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();
}

答案 1

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

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

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

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

此方法可避免复制任何字符2


1 - 不同的含义在各自的javadocs中进行了解释。或者,阅读 Java 11 中 String trim() 和 strip() 方法之间的差异的答案。

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


答案 2

String.trim()很旧,至少到java 1.3。你没有这个吗?


推荐