0

所以我有一个字符串:

String myString = "[tab][space]this[space][tab]is[space]a[space][tab]string";
String[] mySplit = myString.split("\\s+");

System.out.println(mySplit.length);
for (String s : mySplit) 
    System.out.println(s);  

给我:

5
[whitespace] 
this
is
a
string

为什么会这样以及如何阻止第一个位置被空白填充?

4

5 回答 5

3

你可以使用:

myString.trim().split("\\s+");

这应该在将字符串拆分为空格之前修剪掉任何前导或尾随空格。有关更多详细信息,请参阅文档trim

于 2012-09-13T17:05:45.550 回答
2

方式split()已定义,如果输入字符串以分隔符开头,则返回的第一个段将为空。这可能有点违反直觉,但请考虑

String value = ",a,b,c";
String[] fields = value.split(",");

你会想要取回四个元素。

如果您需要删除前导空格,请先使用trim()

于 2012-09-13T17:14:01.363 回答
1

发生的事情是 split 找到所有由您的正则表达式终止的子字符串,包括空字符串。它在字符串的开头找到“\t”,并将其解释为终止一个空字符串。因此,您的数组包含一个空字符串作为第一个元素。保罗的建议解决了这个问题。

有趣的是,如果您的字符串以空格结尾,split 将不会在您的数组中包含空字符串。

有关拆分,请参见javadoc。

于 2012-09-13T17:16:54.517 回答
0

我认为您要执行此操作的功能是trim().

首先修剪字符串...

String myString = "[tab][space]this[space][tab]is[space]a[space][tab]string";
String tempStr = myString.trim();

现在使用 split()

tempStr.split("\\s+");

于 2012-09-13T17:17:00.633 回答
0

是的,您可以使用 trim() 方法,该方法用于删除前导和尾随空格。

于 2012-09-13T17:35:13.723 回答