正则表达式模式在字符串的每一行中查找整数

时间:2015-05-07 08:45:23

标签: java regex

我在这里有一个模式,它在逗号后面找到整数。

我遇到的问题是我的返回值是新行,因此该模式仅适用于新行。我该如何解决?我想让它在每一行找到模式。

感谢所有帮助:

url = new URL("https://test.com");
con = url.openConnection();
is = con.getInputStream();
br = new BufferedReader(new InputStreamReader(is));

while ((line = br.readLine()) != null) {
    String responseData = line;
    System.out.println(responseData);
}

pattern = "(?<=,)\\d+";
pr = Pattern.compile(pattern);
match = pr.matcher(responseData); // String responseData

System.out.println();

while (match.find()) {
    System.out.println("Found: " + match.group());
}

以下是以字符串形式返回的响应:

test.test.test.test.test-test,0,0,0
test.test.test.test.test-test,2,0,0
test.test.test.test.test-test,0,0,3

这是打印输出:

Found: 0
Found: 0
Found: 0

2 个答案:

答案 0 :(得分:4)

问题在于构建String,您只分配BufferedReader中的最后一行:

responseData = line;

如果您在尝试匹配之前打印responseData,则会看到它只有一行,而不是您所期望的。

由于您使用System.out.println打印缓冲区内容,因此执行会查看整个结果,但保存到responseData的内容实际上是最后一行。< / p>

您应该使用StringBuilder来构建整个字符串:

StringBuilder str = new StringBuilder();
while ((line = br.readLine()) != null) {
    str.append(line);
}
responseData = str.toString();
// now responseData contains the whole String, as you expected

提示:使用调试器,它可以让您更好地理解代码,并帮助您更快地找到错误。

答案 1 :(得分:0)

编译正则表达式时可以使用Pattern.MULTILINE选项:

pattern = "(?<=,)\\d+";
pr = Pattern.compile(pattern, Pattern.MULTILINE);