Java Delimiter不为扫描仪工作
用户将在此处输入一个=(数字)。然后我希望它切断a=并保留数字。当我使用s.next()时,它会起作用,但当然它会让我输入两次,这是我不想要的。使用s.nextLine()输入一次,分隔符不起作用。为什么会这样Java Delimiter不为扫描仪工作,java,delimiter,Java,Delimiter,用户将在此处输入一个=(数字)。然后我希望它切断a=并保留数字。当我使用s.next()时,它会起作用,但当然它会让我输入两次,这是我不想要的。使用s.nextLine()输入一次,分隔符不起作用。为什么会这样 Scanner s = new Scanner(System.in); s.useDelimiter("a="); String n = s.nextLine(); System.out.println(n); 因为nextLine()不关心分隔符。当
Scanner s = new Scanner(System.in);
s.useDelimiter("a=");
String n = s.nextLine();
System.out.println(n);
因为nextLine()
不关心分隔符。当您告诉扫描仪返回令牌时,分隔符仅影响扫描仪nextLine()
只返回当前行中剩余的内容,而不关心令牌
在这里,分隔符不是正确的选择;分隔符的作用是告诉扫描器
令牌之间可以有什么,但您试图将其用于它不打算用于的目的。相反:
String n = s.nextLine().replaceFirst("^a=","");
这将输入一行,如果
a=
出现在字符串的开头(即,它将替换为空字符串“”
)replaceFirst
采用正则表达式,^
表示只有当a=
位于字符串开头时,它才匹配。这不会检查用户是否实际输入了a=
;如果你想检查这个,你的代码需要稍微复杂一点,但是这里的关键是你想使用s.nextLine()
返回一个字符串
,然后对这个字符串
进行任何你需要的检查和操作,尝试使用字符串标记器
如果扫描仪#使用定界符()
不适合您的情况
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您可能需要查看正则表达式。对于您所说的简单情况,可以使用
“^(a | b | c)=”
或“^[abc]=”
作为正则表达式。第二个只能处理单个字母。如果要保存出现在=
之前的文本,还有其他方法,可以使用正则表达式或其他字符串
方法。我一定会阅读这些教程。谢谢你的帮助!