为什么以下代码返回下面的输出? 我希望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 ---------------------------
答案 0 :(得分:1)
没有。 1将找到模式并返回,而2号和3号将返回找到的模式之间的文本(在这些情况下用作分隔符)。
答案 1 :(得分:1)
您的主题与您的要求不符。
主题询问String.split()
你正在做Pattern.split()
哪一个你真的需要帮助?
使用String.split();
时,传入正则表达式以应用于字符串,而不是要分割的字符串!
final String s = "this is the string I want to split";
final String[] sa = s.split(" ");
您在.split
(Pattern.split();)
p
Pattern p = Pattern.compile("[a-zA-Z]+|\\s|\\W|\\d");
String [] scrollString = p.split(originalText);
这些方法也有不同的行为。
答案 2 :(得分:0)
split()
方法不会将捕获的字符串部分(分隔符)添加到结果数组
如果您想要分隔符,则必须使用前瞻和后瞻(或使用版本1)
答案 3 :(得分:0)
没有。字符串中的每个字符都被分割模式覆盖,因此被视为不想要的内容。因此,您得到空的结果。
你可以想象你的模式首先找到“你好”,然后分开希望找到一些东西,但是唉!它找到另一个“分离”角色。