快速举例:
public class Test {
public static void main(String[] args) {
String str = " a b";
String[] arr = str.split("\\s+");
for (String s : arr)
System.out.println(s);
}
}
我希望数组arr包含2个元素:“a”和“b”,但结果中有3个元素:“”(空字符串),“a”和“b”。我该怎么做才能做到正确?
答案 0 :(得分:4)
有点欺骗,但替换:
String str = " a b";
与
String str = " a b".trim();
答案 1 :(得分:2)
修剪它的另一种方法是使用向前看并向后看以确保空白夹在两个非空白字符之间,......类似于:
String[] arr = str.split("(?<=\\S)\\s+(?=\\S)");
这个问题是它没有修剪前导空格,给出了这个结果:
a
b
但也不应该String#split(...)
用于分割,而不是修剪。
答案 2 :(得分:1)
简单的解决方案是在trim()
调用之前使用split(...)
删除前导(和尾随)空格。
仅split(...)
不能这样做。拆分正则表达式匹配字符串分隔符;即,在每个匹配的分隔符之前和之后必然存在子串(可能是空的)。
您可以使用split(..., 0)
来处理空白最后的情况。这会丢弃任何尾随的空字符串。但是,没有等效形式的split
用于丢弃前导空字符串。
答案 3 :(得分:0)
您可以添加一个if来检查字符串是否为空,而不是修剪。