countTokens()始终返回1用户输入

时间:2016-07-22 17:31:18

标签: java input token delimiter stringtokenizer

在我们开始之前,我不相信这是一个重复的问题。我已经阅读了题为StringTokenzer countTokens() returns 1 with any string的问题,但这并没有解决正确分隔正确分隔的字符串这一事实,但是没有正确分隔的输入。

当使用StringTokenizer类时,我发现countTokens方法返回不同的结果,具体取决于countTokens中的参数是定义的String还是用户定义的String。例如,以下代码打印值4。

String phrase = "Alpha bRaVo Charlie delta";

StringTokenizer token = new StringTokenizer(phrase);
//There's no need to specify the delimiter in the parameters, but I've tried
//both code examples with " " as the delimiter with identical results

int count = token.countTokens();

System.out.println(count);

但是当用户输入时,此代码将打印值1:Alpha bRaVo Charlie delta

Scanner in = new Scanner(System.in);

String phrase;

System.out.print("Enter a phrase: ");

phrase = in.next();

StringTokenizer token = new StringTokenizer(phrase);

int count = token.countTokens();

System.out.println(count);

4 个答案:

答案 0 :(得分:3)

使用in.nextLine()而不是in.next();

答案 1 :(得分:0)

扫描仪输入=新扫描仪(System.in);

字符串短语;

System.out.print("输入短语:");

phrase = in.nextLine();

是System.out.print(词组);

StringTokenizer token = new StringTokenizer(phrase);

int count = token.countTokens();

的System.out.println(计数);

打印短语并检查in.next()是否正在返回" Alpha"。

如上所述,使用in.nextLine()。

答案 2 :(得分:0)

您可以尝试使用InputStreamReader而不是Scanner:

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

String phrase = "";

System.out.print("Enter a phrase: ");

try {
    phrase = in.readLine();
} catch (IOException e) {
    e.printStackTrace();
}

StringTokenizer token = new StringTokenizer(phrase);

int count = token.countTokens();

System.out.println(count);
但是,Scanner的nextLine()也为我完成了工作。

如果您希望分隔符专门为空格字符,则可能需要将其传递给StringTokenizer的构造函数。否则它将使用“\ t \ n \ r \ f”(其中包括空格字符,但如果短语中也存在\ n字符,则可能无法按预期工作)。

答案 3 :(得分:0)

如果您在调用phrase后检查in.next()的值,您将看到它等于“Alpha”。根据定义,Scanner的next()会读取下一个令牌

改为使用in.nextLine()