2014-02-25 25 views
0

在這裏的第一個問題,所以,如果它不是一個很好的問題,很抱歉。從整數和其他字符的輸入流中讀取整數

我正在一個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,但是對於這種情況看起來都不是很有用。

感謝您的任何輸入和您的時間。 :)

回答

0

它看起來像兩個分隔符相鄰,如")(",它打印出空格。

定界符\\W被設定爲尋找一個非文字字符,所以如果有兩個分隔符相鄰這意味着有他們並返回此空字符串之間的空字符串。

如果你想分隔符匹配一個或多個非單詞字符,你需要使用+ quantifer像\\W+

+0

哇,這真的很容易。我想我應該更多地研究這個正則表達式。謝謝! :D –

+0

@dev_bit沒問題:)很高興能幫到你。 – Pshemo

0

改爲使用\\W+。到目前爲止,您一直在分隔符處僅拾取一個\W字符。 +會做一個貪婪的比賽,直到找到沒有更多。