2017-09-06 65 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

相關問題