我的初始代码无法产生预期的结果:
import java.util.Scanner;
class Strings {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter your word: ");
String word1 = sc.next();
System.out.println(word1.length());
sc.close();
}
}
输出:
tk@localhost:~$ java Strings
Enter your word:
avada kedavra
5
这不是我的字符串的长度。 但是当我尝试这个时(没有用户输入):
class Strings {
public static void main(String[] args) {
String str = new String("avada kedavra");
System.out.println(str.length());
}
}
输出:
tk@localhost:~$ java Strings
13
有效! 那么,当我从用户那里获取输入时,为什么它不起作用呢?我错过了什么?
答案 0 :(得分:10)
默认情况下,sc.next()
会查找并返回下一个完整的令牌。默认情况下,令牌是单词,用空格或换行符分隔(\p{javaWhitespace}+
)。
所以在你的第一个例子中,word1 = "avada"
,长度为5。
使用sc.nextLine()
获取完整的一行。
答案 1 :(得分:0)
简而言之:RTFM
点击延迟时间稍长:扫描仪返回"下一个令牌"在调用next
时,通过采用一种模式计算标记,即所有空格"默认情况下。因此,您对next的调用将返回下一个单词而不是您想要的完整行。
在实例化Scanner
或调用nextLine
时设置适合模式。