我在java Pattern中使用了两次来获取特定值。 它在第一个工作正常,但不在第二个工作。
我的代码
public static void main(String[] args) throws IOException {
final String path = "E://farhad.txt";
FileReader fr = new FileReader(path);
BufferedReader br = new BufferedReader(fr);
String line;
Pattern pattern = Pattern.compile("\\bCBM_Component_", Pattern.CASE_INSENSITIVE);
while ((line = br.readLine()) != null) {
Matcher matcher = pattern.matcher(line);
String[] splitArray = new String[3];
while (matcher.find()) {
int i = 0;
for (String retval : line.split("\"", 3)) {
splitArray[i] = retval;
i++;
}
System.out.println("CBM name: " + splitArray[1]);
System.out.println("CBM number: " + splitArray[2].substring(2, splitArray[2].length() - 1));
line = br.readLine();
pattern = Pattern.compile("\\bAccountability:\\b", Pattern.CASE_INSENSITIVE);
matcher = pattern.matcher(line);
while (!matcher.find()) {
line = br.readLine();
}
}
}
fr.close();
}
}
我的文件
View of the Model "CBM_Component_Account Reconciliation" (CBP10609)
===================================================================
CBM Component
Accountability: Execute
Control Element: Accounting Entity to Accounting Entity
Relationship
从第一个模式(CBM_Component_
)它工作正常,但在第二个模式(Accountability:
)它没有做任何事情。
我必须做什么
谢谢
答案 0 :(得分:0)
问题归结为 - 为什么Pattern.compile("\\bAccountability:\\b", Pattern.CASE_INSENSITIVE)
与文字不匹配:Accountability: Execute
这是因为您错误地使用了字边界匹配器\b
(在":"字符之后的模式末尾)。当您从模式的末尾移除边界匹配器时,您将获得预期的结果。
有关字边界匹配器如何工作的更多信息: Use of \b Boundary Matcher In Java