这里的第一个问题,很抱歉,如果它不是一个非常好的。
我正在开发一个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:614:7
15:
16:7
17:8
18:
19:6
20:8
21:
看起来当两个分隔符彼此相邻时,例如')(',它打印出空格。我不确定它为什么这样做或者它是否可以修复。有没有办法同时使用它们'('作为一个分隔符的字符?在调用input.next()而不使用input.next()作为空格上的继续时,无论如何都要去除空白?或者是否有比Scanner更好的东西可以避免这个问题?我查看了BufferedReader和InputStreamReader,但对这种情况似乎都没有用。
感谢您提供任何意见和时间。 :)
答案 0 :(得分:0)
看起来当两个分隔符彼此相邻时,例如
")("
,它会打印出空格。
您的分隔符\\W
设置为查找一个非单词字符,因此如果两个分隔符彼此相邻,则表示它们之间存在空字符串,此空字符串退回。
如果您希望分隔符与一个或多个非单词字符匹配,则需要使用+
等\\W+
量词。
答案 1 :(得分:0)
请改用\\W+
。到目前为止,您在分隔符处只获取了一个\W
字符。 +
将进行贪婪的比赛,直到找不到为止。