2011-10-31 59 views
7

快速例如:如何在开始时用空白字符分割字符串?

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个元素: “”(空字符串), “一” 和“b”。我该怎么做才能做对?

+5

['修剪()'](http://download.oracle.com/javase/1.4.2/docs/api/java/lang/String.html#trim())首先。 –

回答

4

样的一个作弊的,但取代:

String str = " a b"; 

String str = " a b".trim(); 
+1

或者(不是作弊):字符串ARR [] = str.trim()分裂(“\\ S +”) – Vladimir

+0

@ DairT'arg,需要真正完全相同的代码 – Joe

0

相反的修整,你可以只添加一个,如果检查一个字符串是否为空。

+0

我不认为你的反应适合这个问题... – Fred

2

的另一种方法修剪它是使用向前看,向后看,以确保空白夹在两个非空格字符之间,......是这样的:

String[] arr = str.split("(?<=\\S)\\s+(?=\\S)"); 

问题与此的是,它不剪裁前导空格,让这样的结果:

a 
b 

,但也不应作为String#split(...)是分裂,不修剪。

1

的简单解决方案是使用trim()split(...)呼叫之前除去主导(和后)的空格。

你不能只是split(...)做到这一点。分割正则表达式匹配字符串分隔符;即在每个匹配的分隔符之前和之后必定有一个子串(可能是空的)。

可以处理其中的空白是在结束使用split(..., 0)的情况。这会丢弃任何尾随的空字符串。但是,没有用于放弃前导空字符串的等效形式split