1

以下のコードに示すように、ユーザーから文字列入力を取得し、トークンを分離して文字列配列に押し込むのに苦労しています。入力は正しく記録されますが、positions.split(" "); を実行しようとすると、dataString 配列は、分離された文字列を取りません。私がやろうとしているのは、一連の数値を取得することです。たとえば、1 3 4 を個々のトークンに分割し、長さ 3 の dataString 文字列配列をインスタンス化し、それぞれに 1、3、4 の数値を挿入します。位置。

Scanner input = new Scanner(System.in);
String[] dataString;
String positions;

...

System.out.print("Hand:" + currentHand);
input.nextLine();
System.out.print("\nEnter positions of cards to keep (e.g. 1 4 5 ):");
positions=input.nextLine();
dataString = positions.split(" ");

if (dataString.length > 5) {
    System.out.print("You can hold a maximum of 5 cards");
    positions = input.nextLine();
    dataString = positions.split(" ");
}

input.close();
4

2 に答える 2

0

dataString 配列は、分離された文字列を取りません。

はい、そうです。.split(" ")はまさにそれをStringlikeにし"1 2 3"ます。

コードをデバッグします。あなたが持っている場所:

dataString = positions.split(" ");

置く:

System.out.println("Positions entered: \""+positions+"\"");
dataString = positions.split(" ");
System.out.println("dataString obtained: "+java.util.Arrays.toString(dataString));

を入力する1 2 3と、次の出力が得られます。

Positions entered: "1 2 3"
dataString obtained: [1, 2, 3]

そして、ご覧のとおり、 を分割しても問題はありませんString

アップデート:

スペースの重複に問題がある可能性があります。その場合、次を使用してそれらを削除できます。

dataString = positions.replaceAll("\\s+", " ").trim().split(" ");

それ以外の:

dataString = positions.split(" ");

これにより、文字列が分割前のよう" 1 2 3 "に変換され"1 2 3"ます。

于 2013-05-16T18:43:18.513 に答える