java:在多个ArrayLists中保存String的部分

时间:2016-12-15 12:12:13

标签: java string arraylist

我有一个不同值的字符串,以“;”分隔没有空间。如何保存第一个值直到“;”进入ArrayList part1,第二个值进入下一个ArrayList,依此类推?

MockMultipartFile jsonFile = new MockMultipartFile("coverFile", "", "application/json",
                    "{\"json\": \"someValue\"}".getBytes());

我尝试了以下功能,但这不起作用:

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");

4 个答案:

答案 0 :(得分:2)

如果想要在String中填充一个带有双打的List,可以在一行中完成:

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

当然,您必须处理例外情况。

答案 1 :(得分: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]

答案 2 :(得分: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"存储为字符串数组
  • 字符串将被解析为double并相应地存储到arraylist中

答案 3 :(得分:0)

split方法就是解决这个问题的方法。它将基于分隔符进行拆分并返回一个子字符串数组。

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