2014-01-21 21 views
0

我有一个字符串字符串分割方法在开始时

String text="abc19xyz87nag"; 

我需要只出它的数量只剩下空空的令牌,所以我申请"\\D+"正则表达式如下,

String text="abc19xyz87nag"; 
String[] tks=text.split("\\D+"); 

但我在阵列的开头看到一个空的标记
enter image description here

我怎么会发现另外两个s olutions反正如下

使用扫描仪

Scanner sc = new Scanner(text).useDelimiter("\\D+"); 
     while(sc.hasNext()) { 
      System.out.println(sc.nextInt()); 
     } 

使用Pattern和Matcher

Matcher m = Pattern.compile("\\d+").matcher(text); 
     while (m.find()) { 
      System.out.println(m.group()); 
      } 

那么,为什么字符串分割在开始时留下空的令牌?
我是否需要更改正则表达式以避免它?
任何帮助表示赞赏

+0

另请参阅http://stackoverflow.com/q/19503283/1679863 –

+0

@RohitJain - 我必须对正则表达式进行的更改不会在该副本中提供 – gowtham

+1

它是。清楚地浏览它,然后看看结尾。 –

回答

0

您正则表达式应该像

[^\d] 

希望它可以帮助

0
String s = "smt-ing we want to split"); 
StringTokenizer st = new StringTokenizer(); 
while(st.hasMoreTokens()){ 
System.out.println(st.nextToken()); 
} 
+0

我想你没有得到我的问题... – gowtham

+0

String test =“1324asdasd9846”; \t \t \t String [] tks = test.split(“\\ D +”); \t \t for(int i = 0; i

0

你可以做一些验证,删除空String

String text="abc19xyz87nag"; 
    String[] tks=text.split("\\D+"); 
    List<String> numList=new ArrayList<>(); 
    for(String i:tks){ 
     if(!"".equals(i)){ 
      numList.add(i); 
     } 
    } 
1

这是一个设计决定,在开始时不放弃空字符串。其基本原理是分裂()通常与数据一样使用

item1, item2, item3 

(这里的delimitter是“”),并要保持非空的项目在他们的位置。

现在,假设你用上面的3个条目解析行,其中第一个和最后一个是可选的。如果分裂会丢弃前沿和后空字符串,你会得到2元回来,你不能决定whther输入是:

, item2, item3 

item1, item2 

通过仅丢弃的空字符串最后,你知道每个非空字符串都处于正确的位置。