2016-12-15 2 views
-1

私は ";"で区切られた異なる値の文字列を持っています。スペースなしで。どのようにして最初の値を ";" ArrayList part1に、2番目の値を次のArrayListに追加します。java:複数のArrayListsに文字列の一部を保存する

String line = "10,23;190,33;86,423;132,45"; 
ArrayList<Double> part1 = new ArrayList<>(); 
ArrayList<Double> part2 = new ArrayList<>(); 
... 
part1.add("10,23"); 
part2.add("190,33"); 

私は、次の機能を試してみましたが、これは動作しません:

int index = line.indexOf(";"); 
part1.add(line.substring(0, index); 
+1

なぜ '文字列[] RES = line.splitを使用しませんか( ";");'?あなたが最後に取得する必要があるか分からない。 –

+0

本当にこのために複数のArrayListが必要ですか? –

+1

私が言っていることは次の通りです: 'ArrayList part1.add(" 10,23 ");'私の目コンパイラを渡すことはできません...しかし、あなたは例を作っていると知っています。 .....間違っている..... – Kent

答えて

0

splitメソッドは、このためのソリューションです。区切り文字に基づいて分割され、部分文字列の配列を返します。

string[] subStrings = line.split(";"); 
1

私はあなたが本当に複数のArraylistを必要としないと思います。ただ、いずれかを使用します。

ArrayList<Double> list = new ArrayList<Double>(); 
line = line.replace(",", "."); 
String[] tokens = line.split(";"); 

for(int x=0; x<list.size(); x++) 
    list.add(Double.parseDouble(token[x])); 
  • だからあなたのラインが"1.1;2,2;3,3;4.4;5.5"
  • トークンは文字列はダブルと店に解析される文字列
  • の配列として"1.1""2.2""3.3""4.4""5.5"を格納する持っている場合それに応じてarraylistへ
+0

これは正しいかもしれませんが、複数のArrayListsを持つという彼の要求を満たすものではありません。 –

+0

@PavneetSinghあなたの番号のフォーマットによって異なります。いくつかの国は '.'の代わりに'、 'を小数点として使用しています。その場合、すべての '、'を '.'で最初に置き換えることができます。 – user3437460

+0

@MuratK。私はそれがむしろ明らかにOPだと思う実際には1つのarraylistが欲しい。彼は多分arraylistの使用を誤解していたので、複数のリストを使いたいと思っていました。 – user3437460

2

アイデアが1つのリストを作成するのであればあなたの文字列からダブルスとD、あなたは1行でそれを行うことができます:あなたは例外に対処する必要があります。もちろん、

List<Double> parts = Arrays.stream(line.split(";")).map(elem -> new Double(elem.replace(",", "."))).collect(Collectors.toList()); 

2

文字列からdouble値を解析すると仮定します。ここで

はあなたが必要と何をすべきコードスニペット、次のとおりです。

private static <S, T> void distributeValues(S[] sourceParts, Function<S, T> transformFunction, List<T> ... targetParts) { 
    for (int i = 0; i < sourceParts.length; i++) { 
    S part = sourceParts[i]; 
    targetParts[i].add(transformFunction.apply(part)); 
    } 
} 

そのメソッドの呼び出しは次のようになります。リストされ、

distributeValues(line.split(";"), 
        s -> Double.valueOf(s.replace(",", ".")), 
        part1, part2, part3, part4); 

あなたが自由に選択できます。この道をあなたは移入したい。そのようなものが必要な場合はpart1, part2, part1, part2と指定することもできます。

サンプルメイン方法:

public static void main(String[] args) { 
    String line = "10,23;190,33;86,423;132,45"; 
    List<Double> part1 = new ArrayList<>(); 
    List<Double> part2 = new ArrayList<>(); 
    List<Double> part3 = new ArrayList<>(); 
    List<Double> part4 = new ArrayList<>(); 

    distributeValues(line.split(";"), s -> Double.valueOf(s.replace(",", ".")), part1, part2, part3, part4); 

    System.out.println("part1 = " + part1); 
    System.out.println("part2 = " + part2); 
    System.out.println("part3 = " + part3); 
    System.out.println("part4 = " + part4); 
} 

印刷:

part1 = [10.23] 
part2 = [190.33] 
part3 = [86.423] 
part4 = [132.45] 
関連する問題