String.split如何工作?

时间:2011-11-17 14:48:18

标签: java regex split

为什么以下代码返回下面的输出? 我希望2和3提供相同的字符串拆分1。

    Log.d(TAG, " 1 ---------------------------");
String originalText = "hello. .hello1";

Pattern p = Pattern.compile("[a-zA-Z]+|\\s|\\W|\\d");
Matcher m = p.matcher(originalText);

 while (m.find()) { 
     Log.d(TAG, m.group(0)); 
 }
 Log.d(TAG, "2 --------------------------- " + originalText);

String [] scrollString = p.split(originalText);

int i;      
for (i=0; i<scrollString.length; i++)
    Log.d(TAG, scrollString[i]);

Log.d(TAG, "3 --------------------------- " + originalText);

scrollString = originalText.split("[a-zA-Z]+|\\s|\\W|\\d");


for (i=0; i<scrollString.length; i++)
    Log.d(TAG, scrollString[i]);

输出:

1 ---------------------------

hello

.

.

hello

1

2 ---------------------------

3 --------------------------- 

4 个答案:

答案 0 :(得分:1)

没有。 1将找到模式并返回,而2号和3号将返回找到的模式之间的文本(在这些情况下用作分隔符)。

答案 1 :(得分:1)

您的主题与您的要求不符。

主题询问String.split()你正在做Pattern.split()哪一个你真的需要帮助?

使用String.split();时,传入正则表达式以应用于字符串,而不是要分割的字符串!

String.split();

的JavaDoc
final String s = "this is the string I want to split";
final String[] sa = s.split(" ");

您在.splitPattern.split();

上致电p
Pattern p = Pattern.compile("[a-zA-Z]+|\\s|\\W|\\d");
String [] scrollString = p.split(originalText);

这些方法也有不同的行为。

答案 2 :(得分:0)

split()方法不会将捕获的字符串部分(分隔符)添加到结果数组

如果您想要分隔符,则必须使用前瞻和后瞻(或使用版本1)

答案 3 :(得分:0)

没有。字符串中的每个字符都被分割模式覆盖,因此被视为想要的内容。因此,您得到空的结果。

你可以想象你的模式首先找到“你好”,然后分开希望找到一些东西,但是唉!它找到另一个“分离”角色。