用戶將在此處輸入=(數字)。然後我想讓它切斷a =並保留這個數字。它在我使用s.next()時起作用,但當然它使我輸入了兩次我不想要的東西。用s.nextLine()我輸入一次,分隔符不起作用。爲什麼是這樣?Deliminter不適用於掃描儀
Scanner s = new Scanner(System.in);
s.useDelimiter("a=");
String n = s.nextLine();
System.out.println(n);
用戶將在此處輸入=(數字)。然後我想讓它切斷a =並保留這個數字。它在我使用s.next()時起作用,但當然它使我輸入了兩次我不想要的東西。用s.nextLine()我輸入一次,分隔符不起作用。爲什麼是這樣?Deliminter不適用於掃描儀
Scanner s = new Scanner(System.in);
s.useDelimiter("a=");
String n = s.nextLine();
System.out.println(n);
因爲nextLine()
不關心分隔符。當您告訴它返回令牌時,分隔符只會影響Scanner
。 nextLine()
只是返回當前行中的任何內容而不關心令牌。
分隔符不是去這裏的路;分隔符的目的是告訴Scanner
什麼可以在令牌之間出現,但是您正嘗試將它用於它不適用的目的。代替:
String n = s.nextLine().replaceFirst("^a=","");
此接口輸入的線,然後剝去a=
如果它出現在字符串的開頭(即,它與空字符串""
代替它)。 replaceFirst
需要正則表達式,並且^
表示它只在a=
位於字符串的開頭時才匹配。這不會檢查以確保用戶實際輸入了a=
;如果你想檢查一下,你的代碼將需要更復雜一點,但關鍵在於你想用s.nextLine()
返回String
,然後在String
上做任何你需要的檢查和操作。
如果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
有沒有辦法爲更換名單做到這一點。假設我也想爲b =做這個。有沒有辦法做到這一點,而不是列出n.replaceFirst(「^ b =」,「」); n.replaceFirst( 「^ C =」, 「」);等等.. –
@Theunknown您可能想要在正則表達式上查看[本教程](http://docs.oracle.com/javase/tutorial/essential/regex/)。對於像你說的簡單情況,你可以使用'「^(a | b | c)=」'或'「^ [abc] =」'作爲正則表達式。第二個只能用單個字母工作。如果你想保存在'='之前出現的文本,還有其他方法,使用正則表達式或其他'String'方法。 – ajb
我一定會閱讀這些教程。謝謝你的幫助! –