0

次の形式で、「、」で区切られた一連の数字を含む文字列を取得しました。

1.2223232323232323,74.00

それらを文字列 [] にしたいのですが、必要なのはコンマの右側の数字だけです。(74.00)。リストには、上記のような約 10,000 の異なる行があります。現在、私は String.split(",") を使用しています。

System.out.println(String[1]) =
1.2223232323232323 
74.00

2 つの異なるインデックスに分割されないのはなぜですか? split では次のようになるはずだと思いました:

 System.out.println(String[1]) = 1.2223232323232323
 System.out.println(String[2]) = 74.00

ただし、String[] array = string.split (",") では、両方の値が改行で区切られた 1 つのインデックスが生成されます。

そして、必要なのは 74.00 だけです。REGEX を使用する必要があると思いますが、これは私にとって一種のギリシャ語です。誰かが私を助けてくれませんか:)?

4

3 に答える 3

2

ファイル内にある場合:

Scanner sc = new Scanner(new File("..."));
sc.useDelimiter("(\r?\n)?.*?,");
while (sc.hasNext())
  System.out.println(sc.next());

改行で区切られた 1 つの巨大な文字列の場合:

String oneGiantString = "1.22,74.00\n1.22,74.00\n1.22,74.00";
Scanner sc = new Scanner(oneGiantString);
sc.useDelimiter("(\r?\n)?.*?,");
while (sc.hasNext())
  System.out.println(sc.next());

それぞれが単一の文字列の場合:

String line = "1.2223232323232323,74.00";
System.out.println(line.replaceFirst(".*?,", ""));

正規表現の説明:

(\r?\n)?オプションの改行文字を意味します。
.ワイルドカードを意味します。
.*?0 個以上のワイルドカードを意味します (貪欲ではない一致を意味*?するだけで*はなく、これはおそらくあまり意味がありません)。
,は、ええと、...、カンマを意味します。

参照

splitファイルまたは単一の文字列の場合:

String line = "1.2223232323232323,74.00";
String value = line.split(",")[1];

split1 つの巨大な文字列 (これも正規表現が必要です) の場合 (しかし、私が好むScannerのは、そのすべてのメモリは必要ありません):

String line = "1.22,74.00\n1.22,74.00\n1.22,74.00";
String[] array = line.split("(\r?\n)?.*?,");
for (int i = 1; i < array.length; i++) // the first element is empty
   System.out.println(array[i]);
于 2013-03-04T11:23:59.910 に答える
0

試してみてください:

String[] parts = "1.2223232323232323,74.00".split(",");
String value   = parts[1]; // your 74.00
于 2013-03-04T11:19:26.357 に答える
0
String[] strings = "1.2223232323232323,74.00".split(",");
于 2013-03-04T11:20:09.147 に答える