countTokens() 总是 returns 1 用户输入
countTokens() always returns 1 with user input
在我们开始之前,我不认为这是一个重复的问题。我已经阅读了标题为 StringTokenzer countTokens() returns 1 with any string 的问题,但这并没有解决正确分隔的字符串被正确计算,但正确分隔的输入却不是这样的事实。
使用 StringTokenizer class 时,我发现 countTokens 方法 returns 不同的结果取决于 countTokens 中的参数是定义的字符串还是用户定义的字符串。例如,以下代码打印值 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);
但是当用户 enters:Alpha bRaVo Charlie delta
时,此代码将打印值 1
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);
使用 in.nextLine() 而不是 in.next();
扫描仪 in = 新扫描仪(System.in);
字符串词组;
System.out.print("Enter a phrase: ");
短语=in.nextLine();
System.out.print(词组);
StringTokenizer token = new StringTokenizer(phrase);
int 计数 = token.countTokens();
System.out.println(计数);
打印短语并检查 in.next() 是否返回 "Alpha"。
按照上面的建议,使用 in.nextLine()。
您可以尝试使用 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() 也为我完成了工作。
如果您希望定界符具体为 space 字符,您可能希望将其传递给 StringTokenizer 的构造函数。否则它将使用“\t\n\r\f”(其中包括 space 字符,但如果例如短语中也存在 \n 字符,则可能无法按预期工作)。
如果您在调用 in.next()
后检查 phrase
的值,您将看到它等于 "Alpha"。根据定义,Scanner 的 next()
读取下一个 token.
改用in.nextLine()
。
在我们开始之前,我不认为这是一个重复的问题。我已经阅读了标题为 StringTokenzer countTokens() returns 1 with any string 的问题,但这并没有解决正确分隔的字符串被正确计算,但正确分隔的输入却不是这样的事实。
使用 StringTokenizer class 时,我发现 countTokens 方法 returns 不同的结果取决于 countTokens 中的参数是定义的字符串还是用户定义的字符串。例如,以下代码打印值 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);
但是当用户 enters:Alpha bRaVo Charlie delta
时,此代码将打印值 1Scanner 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);
使用 in.nextLine() 而不是 in.next();
扫描仪 in = 新扫描仪(System.in);
字符串词组;
System.out.print("Enter a phrase: ");
短语=in.nextLine();
System.out.print(词组);
StringTokenizer token = new StringTokenizer(phrase);
int 计数 = token.countTokens();
System.out.println(计数);
打印短语并检查 in.next() 是否返回 "Alpha"。
按照上面的建议,使用 in.nextLine()。
您可以尝试使用 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() 也为我完成了工作。
如果您希望定界符具体为 space 字符,您可能希望将其传递给 StringTokenizer 的构造函数。否则它将使用“\t\n\r\f”(其中包括 space 字符,但如果例如短语中也存在 \n 字符,则可能无法按预期工作)。
如果您在调用 in.next()
后检查 phrase
的值,您将看到它等于 "Alpha"。根据定义,Scanner 的 next()
读取下一个 token.
改用in.nextLine()
。