用户将输入=(此处为数字)。然后我希望它切断a =并保留数字。它在我使用s.next()时有效,但当然它让我输入它两次,我不想要。使用s.nextLine()我输入一次,分隔符不起作用。这是为什么?
Scanner s = new Scanner(System.in);
s.useDelimiter("a=");
String n = s.nextLine();
System.out.println(n);
答案 0 :(得分:1)
因为nextLine()
不关心分隔符。当您告诉它返回令牌时,分隔符仅影响Scanner
。 nextLine()
只返回当前行中剩余的内容而不关心令牌。
分界符不是去这里的方式;分隔符的目的是告诉Scanner
令牌之间可以来的是什么,但是你试图将它用于它不打算用于的目的。代替:
String n = s.nextLine().replaceFirst("^a=","");
如果它出现在字符串的开头(即用空字符串a=
替换它),则输入一行,然后剥离""
。 replaceFirst
采用正则表达式,^
表示仅在a=
位于字符串开头时才匹配。这不会检查以确保用户实际输入a=
;如果你想检查一下,你的代码需要更复杂,但关键是你要使用s.nextLine()
返回String
,然后做任何检查和操作你需要String
。
答案 1 :(得分:0)
如果StringTokenizer
不适合您的情况,请尝试Scanner#useDelimiter()
。
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