从整数和其他字符的输入流中读取整数

时间:2014-02-25 21:18:34

标签: java regex string java.util.scanner delimiter

这里的第一个问题,很抱歉,如果它不是一个非常好的。

我正在开发一个java程序,它将接受这样的输入

  

(1→2)(2→3)(3→4)(4→5)

     

(6 - ; 7)(7个8)(6 - ; 8)

然后将数字存储在数组中。现在,我只是想让解析正确。所以我只是在不同的行上打印输出。这是我一直在尝试的:

Scanner input = new Scanner(System.in).useDelimiter("\\W");
for(int i = 0; (line = input.next()) != null; i++){
    System.out.println(i + ": " + line);
}

并且已经获得此输出

  

0:1

     

1:2

     

2:

     

3:2

     

4:3

     

5:

     

6:3

     

7:4

     

8:

     

9:4

     

10:5

     

11:

     

12:

     13:6

     

14:7

     

15:

     

16:7

     

17:8

     

18:

     

19:6

     

20:8

     

21:

看起来当两个分隔符彼此相邻时,例如')(',它打印出空格。我不确定它为什么这样做或者它是否可以修复。有没有办法同时使用它们'('作为一个分隔符的字符?在调用input.next()而不使用input.next()作为空格上的继续时,无论如何都要去除空白?或者是否有比Scanner更好的东西可以避免这个问题?我查看了BufferedReader和InputStreamReader,但对这种情况似乎都没有用。

感谢您提供任何意见和时间。 :)

2 个答案:

答案 0 :(得分:0)

  

看起来当两个分隔符彼此相邻时,例如")(",它会打印出空格。

您的分隔符\\W设置为查找一个非单词字符,因此如果两个分隔符彼此相邻,则表示它们之间存在空字符串,此空字符串退回。

如果您希望分隔符与一个或多个非单词字符匹配,则需要使用+\\W+量词。

答案 1 :(得分:0)

请改用\\W+。到目前为止,您在分隔符处只获取了一个\W字符。 +将进行贪婪的比赛,直到找不到为止。