我正在为 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 许可协议
修剪前导和尾随空格的简单方法是调用
String.trim()
。对于 Java 11 及更高版本,您还可以使用String.strip()
它对“空白”的含义1使用了不同的解释。如果您只想修剪前导和尾随空格(而不是所有前导和尾随空格),有一个名为
StringUtils.strip(String, String)
的 Apache 通用方法可以做到这一点;用" "
作为第二个参数调用它。您尝试的代码有许多错误,并且从根本上讲效率低下。如果你真的想自己实现这个,那么你应该:
String.substring(from, end)
创建一个包含您要保留的字符的新字符串。这种方法避免复制任何字符2 。
1 - 不同的含义在各自的 javadoc 中有解释。或者,阅读 Difference between String trim() and strip() methods in Java 11 的答案。
2 - 实际上,这取决于
String
的实施。对于某些实现,将不会进行复制,而对于其他实现,则会生成一个副本。但这两种方法都是对您的方法的改进,它至少需要 2 个副本,如果有任何字符需要修剪,则需要更多副本。