java中的Length方法,当在输入字符串上使用时不会产生预期的结果

时间:2017-09-06 08:05:22

标签: java string java.util.scanner

我的初始代码无法产生预期的结果:

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

有效! 那么,当我从用户那里获取输入时,为什么它不起作用呢?我错过了什么?

2 个答案:

答案 0 :(得分:10)

默认情况下,sc.next()会查找并返回下一个完整的令牌。默认情况下,令牌是单词,用空格或换行符分隔(\p{javaWhitespace}+)。

所以在你的第一个例子中,word1 = "avada",长度为5。

使用sc.nextLine()获取完整的一行。

答案 1 :(得分:0)

简而言之:RTFM

点击延迟时间稍长:扫描仪返回"下一个令牌"在调用next时,通过采用一种模式计算标记,即所有空格"默认情况下。因此,您对next的调用将返回下一个单词而不是您想要的完整行。

在实例化Scanner或调用nextLine时设置适合模式。