Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java:在多个ArrayList中保存字符串的部分_Java_String_Arraylist - Fatal编程技术网

java:在多个ArrayList中保存字符串的部分

java:在多个ArrayList中保存字符串的部分,java,string,arraylist,Java,String,Arraylist,我有一个不同值的字符串,用“;”分隔,没有空格。如何保存第一个值,直到“;”进入ArrayList part1,第二个值进入下一个ArrayList,依此类推 String line = "10,23;190,33;86,423;132,45"; ArrayList<Double> part1 = new ArrayList<>(); ArrayList<Double> part2 = new ArrayList<>(); ... part1.ad

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

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

拆分方法是解决此问题的方法。它将根据分隔符进行拆分,并返回一个子字符串数组

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

我想你并不真的需要多个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]));
ArrayList list=new ArrayList();
行=行。替换(“,”,“);
String[]tokens=line.split(“;”);

对于(int x=0;x如果要在一个列表中填充字符串中的双精度,可以在一行中完成:

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

当然,您必须处理异常。

假设您要解析字符串中的双精度值

下面是一个代码段,它应该满足您的要求:

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));
  }
}
通过这种方式,您可以自由选择要填充的列表。如果您需要类似的内容,您甚至可以指定
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);
}

为什么不使用
String[]res=line.split(;”);
?但不确定最终需要得到什么。您真的需要不止一个ArrayList吗?我想说的是:
ArrayList part1.add(“10,23”)
无法通过我的眼睛编译器…我知道你在举例,但是…语法太错误,类型太错误…如果该行是文件的一部分,并且你想将每一列(如CSV文件)保存到专用的arraylist中,那么你应该问这个问题。()虽然这可能是对的,但它并不能满足他拥有多个数组列表的要求。@Pavneethingh,这取决于您的数字格式。有些国家使用
而不是
作为十进制。在这种情况下,您可以先将所有
替换为
。@MuratK。我认为这实际上是相当明显的只需要1个arraylist。他可能误解了arraylist的用法,因此想要使用多个列表。
distributeValues(line.split(";"), 
                   s -> Double.valueOf(s.replace(",", ".")), 
                   part1, part2, part3, part4);
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]