2014-02-11 81 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

相关问题