2012-04-06 69 views
2

我有一个字符串来自数据库。 字符串是这样的: -正则表达式避免:和,在字符串

ABC:def,ghi:jkl,hfh:fhgh,ahf:jasg 

总之String:String,并重复了较大的值。

我需要解析此字符串以获得不作任何:,单词和每个单词存储在ArrayList中

我可以用分割功能(两次),这样做,但我想通了,使用正则表达式我可以做它一气呵成,并得到该ArrayList ..

String strLine="category:hello,good:bye,wel:come"; 
     Pattern titlePattern = Pattern.compile("[a-z]"); 
     Matcher titleMatcher = titlePattern.matcher(strLine); 
     int i=0; 
     while(titleMatcher.find()) 
     { 
      i=titleMatcher.start(); 
      System.out.println(strLine.charAt(i)); 
     } 

但是它没有给我正确的results..It结束了给我比赛的索引中找到的,然后我需要追加它是不那么合乎逻辑的,高效的, 。

有各地的任何方式..

回答

5
String strLine="category:hello,good:bye,wel:come"; 
String a[] = strLine.split("[,:]"); 
for(String s :a) 
    System.out.println(s); 
0

即使可以使用正则表达式来一次解析整个字符串,我认为这将是比用多个步骤拆分它的可读性。

1

使用Java StringTokenizer 样品:

StringTokenizer st = new StringTokenizer(in, ":,"); 
while(st.hasMoreTokens()) 
    System.out.println(st.nextToken()); 
+0

哪一个更有效的......我知道我可以很容易使用令牌,但我认为采用分体式会更高效,代币.. – AngelsandDemons 2012-04-06 06:24:45

+0

它取决于字符串的长度。如果字符串非常短,您可以分割,如果它很长,最好迭代令牌。然后使用标记器可以跳过空标记,例如,如果在循环过程中有“a :: b:c”。 – dash1e 2012-04-06 06:33:13

+0

我的字符串可以很短或可以非常非常long.One事情肯定字符串的形成总是相同的.. String1:AssociatedString,String2:AssociatedString等.. – AngelsandDemons 2012-04-06 07:58:48