Java で以下のように 1 行から一連の数値を読み取ることができます。
1 80,982 163,8164 170,2620
したがって、最終的には結果配列が必要です[1, 80, 982, 163, 8164, 170, 2620]
スキャナーの使用を考えていますが、うまく実装する方法がわかりません。ヒントを教えてください。
読んでくれてありがとう!
Java で以下のように 1 行から一連の数値を読み取ることができます。
1 80,982 163,8164 170,2620
したがって、最終的には結果配列が必要です[1, 80, 982, 163, 8164, 170, 2620]
スキャナーの使用を考えていますが、うまく実装する方法がわかりません。ヒントを教えてください。
読んでくれてありがとう!
それが私だったら、 を使用して 1 行を読みBufferedReader
、次に単純に使用します
String[] values = line.split("[, ]");
私は通常、Scanner
乱雑でやり過ぎだと思います。
はい、 Scanner クラスはこれでうまく機能します。
public static void main(String[] args) throws Exception {
Scanner s = new Scanner(strOrFile).useDelimiter(",| ");
List<Integer> myList = new ArrayList<Integer>();
while (s.hasNext()) {
myList.add(s.nextInt());
}
}
ファイルから読み取る場合は特にうまく機能します。(あなたのために仕事を減らします。)
スキャナーは問題ありません。目的の区切り文字パターンを設定するだけです。これを参照してください。
String[] が必要なので、最善の解決策は String.split です
String[] s = str.split("[ ,]+");
これを試して:
public static void main(String[] args) {
String str = "1 80,982 163,8164 170,2620";
String[] s = str.split(" |,");
for(String ss:s)
System.out.println(ss);
}
以下の正規表現で文字列を分割します。
String input = "1 80,982 163,8164 170,2620 ";
String[] values = input.split("\\s*(,|\\s)\\s*");
for(String val: values)
{
System.out.println(val);
}
以下の条件に一致します。
(,|\\s)
。区切り文字が複数ある場合は、 のように括弧で囲むことができます(&|,|@|\\s)
。ここでフィドルを確認してください。
いくつかのコンマ、スペース、およびスペースを含むコンマを含む単純な入力ファイルの場合、Rais の正規表現と Evgeniy の正規表現は両方とも分割で機能しました。後者の場合、+ 記号が重要です。このデータでは、他のオプションはどれも機能しませんでした: 1.0 2.0 3.0 4.0 5.0,6.0 7.0 8.0 9.0 10.0, 11.0 12.0