Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Delimiter不为扫描仪工作_Java_Delimiter - Fatal编程技术网

Java Delimiter不为扫描仪工作

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()不关心分隔符。当

用户将在此处输入一个=(数字)。然后我希望它切断a=并保留数字。当我使用s.next()时,它会起作用,但当然它会让我输入两次,这是我不想要的。使用s.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]=”
作为正则表达式。第二个只能处理单个字母。如果要保存出现在
=
之前的文本,还有其他方法,可以使用正则表达式或其他
字符串
方法。我一定会阅读这些教程。谢谢你的帮助!