用户将在此处输入=(数字)。然后我想让它切断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
我一定会阅读这些教程。谢谢你的帮助! –