2016-12-15 79 views
-1

我有一个字符串,其中有不同的值,用“;”分隔。没有空间。如何保存第一个值直到“;”进入ArrayList part1,将第二个值放入下一个ArrayList等等?java:在多个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"); 

我尝试了以下的功能,但是这并不工作:

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

为什么不使用'字符串[]解析度= line.split( “;”);'?不知道你最终需要得到什么。 –

+0

你真的需要多个ArrayList吗? –

+1

我想说的是:'ArrayList part1.add(“10,23”);'不能通过我的眼睛编译器...我知道你在做例子,但是......语法错误,类型是错误的..... – Kent

回答

0

分裂法是该解决方案。它将根据分隔符进行分割并返回一个子数组。

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"为字符串
  • 字符串会被解析成两倍和存储阵列相应地进入阵列列表
+0

虽然这可能是正确的,但它并不能满足他有多个ArrayLists的要求。 –

+0

@PavneetSingh这取决于你的号码的格式。一些国家使用','代替'.'作为小数。在这种情况下,您可以先将所有'''替换为'.'。 – user3437460

+0

@MuratK。我认为这是相当明显的OP实际上只需要1个数组列表。他可能误解了arraylist的使用,因此想要使用多个列表。 – user3437460

2

如果想法是有一个List填充与双打d从你的字符串,你可以做一个行:

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] 
相关问题