在我们开始之前,我不相信这是一个重复的问题。我已经阅读了题为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);
答案 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()
。