分隔符不适用于扫描仪

时间:2014-05-07 00:34:21

标签: java delimiter

用户将输入=(此处为数字)。然后我希望它切断a =并保留数字。它在我使用s.next()时有效,但当然它让我输入它两次,我不想要。使用s.nextLine()我输入一次,分隔符不起作用。这是为什么?

    Scanner s  = new Scanner(System.in);
    s.useDelimiter("a=");
    String n = s.nextLine();
    System.out.println(n);

2 个答案:

答案 0 :(得分:1)

因为nextLine()不关心分隔符。当您告诉它返回令牌时,分隔符仅影响ScannernextLine()只返回当前行中剩余的内容而不关心令牌。

分界符不是去这里的方式;分隔符的目的是告诉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