3 回答

TA贡献1895条经验 获得超7个赞
使用字符串。.
考虑到它需要一个正则表达式作为参数,并且是一个保留的正则表达式操作数,因此您需要用 .因此,将其设置为两个,因此不会被解释为您正在为字符使用 - 无效 - 转义序列:|
\
\
\|
|
String[] parts = text.split("\\|");
看到它在这里工作:https://ideone.com/WibjUm
如果你想使用你的正则表达式方法,你需要分组并捕获每个重复的字符,并将它们限制为除 之外的任何内容,可能使用像 .|
|
\\|([^\\|]*)
在您的循环中,您迭代并仅使用捕获组 1,因为它是每个匹配项将拥有的唯一组。m.find()
String text = "|tab_PRO|1|1|#tRecordType#||0|tab_PRO|";
Pattern p = Pattern.compile("\\|([^\\|]*)");
Matcher m = p.matcher(text);
while(m.find()){
System.out.println(m.group(1));
}
https://ideone.com/RNjZRQ

TA贡献1719条经验 获得超6个赞
如注释中所述,使用 更容易完成。String.split
至于你自己的代码,你不必要地使用了内部循环,这导致了这个异常。您只有一个组,但 for 循环将导致您查询多个组。您的循环应该像以下简单一样简单:
Pattern p = Pattern.compile("(?<=\\|)(.*?)\\|");
Matcher m = p.matcher(text);
while (m.find()) {
String test = m.group(1);
System.out.println(test);
}
打印
tab_PRO
1
1
#tRecordType#
0
tab_PRO
请注意,我必须在您的正则表达式中使用查找断言。
添加回答
举报