2

ScannerクラスのuseDelimiterを使用すると、問題が発生します。

Scanner sc = new Scanner(System.in).useDelimiter("-");
while(sc.hasNext())
{
    System.out.println(sc.next());
}

私がこの入力を持っている場合

ABC

出力は次のようになります

AB

最後の文字が出力されるまで、別の「-」を入力するまで待ちます

ただし、ユーザーがデータを入力する代わりに、スキャナーに文字列を挿入すると、コードは機能します。その理由は何ですか、どうすれば修正できますか?StringTokenzierを使いたくない

4

3 に答える 3

5

Scannerが別の入力を待たなかった場合は、-入力の入力が完了したと誤って想定します。

つまり、次の入力の長さを知る方法がないため、Scanner入力を待つ必要があります。-

したがって、ユーザーが入力したいと思っていてA-B-CDE、でコーヒーを飲むのをやめたC場合、正しい入力が得られません。(あなたは期待します[ A, B, CDE ]が、それは得られるでしょう[ A, B, C ]

String完全に渡すとScanner、入力の終わりがどこにあるかがわかり、別の区切り文字を待つ必要がありません。

私がそれをどのように行うかは次のとおりです:

Scanner stdin = new Scanner(System.in);
String input = stdin.nextLine();
String[] splitInput = input.split("-", -1);

Stringsこれで、すべての間のデータを含む配列が作成されます-

String.split()ここにあなたの読書の喜びのためのドキュメントへのリンクがあります。

于 2010-08-16T12:53:30.617 に答える
3

別の区切り文字列を使用することもできます。useDelimiter( "-|\n" ); これは、String引数で機能するだけでなく、から読み取ることでも機能しSystem.inます。System.inの場合、これには行の終わりでEnterキーを押す必要があります。

于 2010-08-16T13:00:33.050 に答える
0

私がそれをどのように行うかは次のとおりです:

Scanner stdin = new Scanner(System.in);
String s = stdin.nextLine();
String[] splitInput = s.split("-", -1);

Stringsこれで、すべての間のデータを含む配列が作成されます-

于 2017-03-03T09:56:33.443 に答える