2014-02-11 77 views
2

我正在使用java正則表達式將我的字符串拆分爲每個2個字符的子字符串。我正在使用下面的代碼。Java正則表達式不能按預期方式工作

import java.util.*; 
import java.util.regex.Pattern; 
import java.util.regex.Matcher; 
public class HelloWorld{ 

    public static void main(String []args) 
    { 
     String str = "admins"; 
     String delimiters = "([a-z]{2})"; 

     String[] tokensVal = str.split(delimiters); 

     System.out.println("Count of tokens = " + tokensVal.length); 
     System.out.println(Arrays.toString(tokensVal)); 
    } 
} 

但運行下面的代碼打印計數值爲零並打印一個空數組。

+4

您可以使用兩個字母作爲這裏的_delimiters_。我不明白你爲什麼會對結果感到驚訝? – fge

+0

是的,我想用兩個字母分隔?那麼這有什麼問題?如果我想用空格分隔,我使用string.split(「」)。所以如果想分成兩個字符的字符串,那麼我不應該使用上面提到的代碼? – user3213851

+1

不,你不應該,因爲'.spltit()'中的分隔符是_consumed_。這不是你想要的,它是? – fge

回答

3

使用正則表達式作爲分隔符將嘗試通過消除由表達式匹配的字符來拆分字符串。我想你想這些字符本身作爲子字符串,所以String.split()不會幫助。

試試這個:

​​

輸出:

ad 
mi 
ns 
8
import java.util.*; 
import java.util.regex.Pattern; 
import java.util.regex.Matcher; 

public class ApachePOI{ 
    public static void main(String []args) { 
     String str = "admins"; 
     String delimiters = "(?<=\\G.{2})"; 

     String[] tokensVal = str.split(delimiters); 


     System.out.println("Count of tokens = " + tokensVal.length); 
     System.out.println(Arrays.toString(tokensVal)); 
    } 
} 

輸出:

Count of tokens = 3 
[ad, mi, ns] 
+2

不錯的使用'\ G'! +1 – fge

+1

也許值得注意的是,這將字符串拆分爲2個字符的精確組,如果他只想要字母(或者只是小寫字母),他仍然必須使用[az](或[az] ,[a-zA-Z]或\ w),並且需要在分隔符的前面添加可選的字符數量(例如:\ W *(?<= \\ G \ w {2}) ') –

0

如果你有興趣,這是不使用正則表達式的解決方案:

String str = "admins"; 
    String splittedStr = null; 
    for (int i = 0; i < str.length()-1;) { 
     splittedStr = new String (new char[] {str.charAt(i),str.charAt(i+1)}); 
     i=i+2; 
     System.out.println(splittedStr); 
    } 

輸出:
廣告
英里
NS

相關問題