2017-09-06 23 views
0

我的初始代码不会产生所期望的结果:长度方法中,在输入字符串中使用时不会产生预期的结果

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(); 
    } 
} 

输出:

[email protected]:~$ 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()); 
    } 
} 

输出:

[email protected]:~$ java Strings 
       13 

它的工作原理! 那么,为什么当我从用户那里获得输入时它不工作?我错过了什么?

+3

下一个词是avada。 – user2357112

+6

使用'sc.nextLine()' – Eran

+0

谢谢。这工作! –

回答

10

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

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

使用sc.nextLine()以获得完整的线。

+0

为了完整,它使用['delimiter'](https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#delimiter()),'\ p {javaWhitespace } +'默认情况下。如果我们不想读取它,可以改变它以匹配另一个['Pattern'](https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html)全线。 – AxelH

+0

@GhostCat有很多,当你只是搜索'java扫描仪阅读整行':)。 – Tom

+1

@Tom ...有一个原因,你为什么比我多5000张投票;-) ......并诚实地说:我搜索下一个'java扫描仪',也许用'token'。 – GhostCat

0

简而言之:RTFM

更长的点击懒了一下:扫描仪返回“下一个标记”,呼吁next令牌采取的模式,这是“所有空格”默认计算时。所以你的下一个电话会返回下一个字,而不是你想要的完整行。

当实例化Scanner或调用nextLine时,请设置一个拟合图案。

+0

我没有看到与其他答案的区别... – Derlin

+0

@ Derlin重叠在时间。当我开始写作时,没有答案,我只需要更长的时间,因为我必须得到链接到Javadoc – Lothar

+0

我明白^^ – Derlin

相关问题