2016-06-20 6 views
3

なぜ、この私が入力したにも関わらず、印刷、文字列全体 "1fish2fish" ...Javaはここで最後の単語を印刷しないのはなぜですか?

import java.util.Scanner; 
class Main { 
    public static void main(String[] args) { 
    String input = "1,fish,2,fish"; 
    Scanner sc = new Scanner(input); 
    sc.useDelimiter(","); 
    System.out.print(sc.nextInt()); 
    System.out.println(sc.next()); 
    System.out.print(sc.nextInt()); 
    System.out.println(sc.next()); 
    } 
} 

しかし、これだけ版画 "1fish2" "1を、魚、2、魚は" でしょうか?

import java.util.Scanner; 
class Main { 
    public static void main(String[] args) { 
    System.out.println("Enter your string: "); 
    Scanner sc = new Scanner(System.in); 
    sc.useDelimiter(","); 
    System.out.print(sc.nextInt()); 
    System.out.println(sc.next()); 
    System.out.print(sc.nextInt()); 
    System.out.println(sc.next()); 
    } 
} 
+0

http://ideone.com/3nVHEP –

答えて

4

最初のケースでは、スキャナには最後の区切り文字は必要ありません。それ以上の文字がないことがわかっています。したがって、最後のトークンが「魚」であり、処理する文字がもうないことがわかります。

System.inスキャンの場合、4番目のトークンはシステム入力に4番目の '、'が入力された場合にのみ完了したものと見なされます。

デフォルトでは、空白は区切り文字と見なされます。しかし、useDelimiterを使用して別の区切り文字を指定すると、空白文字はトークンをそれ以上区切りません。実際には、あなたの最初の試験は空白文字が任意のより多くの区切り文字ではないことを証明するように変更することができ

...

public static void main(String[] args) { 
    String input = "1,fish,2,fish\n\n\n"; 
    Scanner sc = new Scanner(input); 
    sc.useDelimiter(","); 
    System.out.print(sc.nextInt()); 
    System.out.println(sc.next()); 
    System.out.print(sc.nextInt()); 
    System.out.println(sc.next()); 

    System.out.println("Done"); 
    sc.close(); 

    } 

改行文字は、第四トークンの一部として扱われます。

0

スキャナは別の 'を入力するのを待つので、'を入力するとすぐに1fish2の後に魚が印刷されます。

ので、私は最初のスニペットを確認1,fish,2,fish,代わりの1,fish,2,fish

1

を渡します。それは、正しく印刷される -

リンク - http://code.geeksforgeeks.org/jK1Mlu

は、あなたの期待が異なる場合はお知らせください。

+0

はい、最初のスニペットが期待どおりに印刷されていました。 2番目は私が問題を理解していたものでした。 –

関連する問題