2014-05-07 36 views
1

用戶將在此處輸入=(數字)。然後我想讓它切斷a =並保留這個數字。它在我使用s.next()時起作用,但當然它使我輸入了兩次我不想要的東西。用s.nextLine()我輸入一次,分隔符不起作用。爲什麼是這樣?Deliminter不適用於掃描儀

Scanner s = new Scanner(System.in); 
    s.useDelimiter("a="); 
    String n = s.nextLine(); 
    System.out.println(n); 

回答

1

因爲nextLine()不關心分隔符。當您告訴它返回令牌時,分隔符只會影響ScannernextLine()只是返回當前行中的任何內容而不關心令牌。

分隔符不是去這裏的路;分隔符的目的是告訴Scanner什麼可以在令牌之間出現,但是您正嘗試將它用於它不適用的目的。代替:

String n = s.nextLine().replaceFirst("^a=",""); 

此接口輸入的線,然後剝去a=如果它出現在字符串的開頭(即,它與空字符串""代替它)。 replaceFirst需要正則表達式,並且^表示它只在a=位於字符串的開頭時才匹配。這不會檢查以確保用戶實際輸入了a=;如果你想檢查一下,你的代碼將需要更復雜一點,但關鍵在於你想用s.nextLine()返回String,然後在String上做任何你需要的檢查和操作。

+0

有沒有辦法爲更換名單做到這一點。假設我也想爲b =做這個。有沒有辦法做到這一點,而不是列出n.replaceFirst(「^ b =」,「」); n.replaceFirst( 「^ C =」, 「」);等等.. –

+0

@Theunknown您可能想要在正則表達式上查看[本教程](http://docs.oracle.com/javase/tutorial/essential/regex/)。對於像你說的簡單情況,你可以使用'「^(a | b | c)=」'或'「^ [abc] =」'作爲正則表達式。第二個只能用單個字母工作。如果你想保存在'='之前出現的文本,還有其他方法,使用正則表達式或其他'String'方法。 – ajb

+0

我一定會閱讀這些教程。謝謝你的幫助! –

0

如果Scanner#useDelimiter()不適合您的情況,請嘗試StringTokenizer

Scanner s = new Scanner(System.in); 
String n = s.nextLine(); 
StringTokenizer tokenizer = new StringTokenizer(n, "a="); 

while (tokenizer.hasMoreTokens()) { 
    System.out.println(tokenizer.nextToken()); 
} 

或嘗試用String#split()方法

for (String str : n.split("a=")) { 
    System.out.println(str); 
} 

輸入:

a=123a=546a=78a=9 

輸出:

123 
546 
78 
9