2016-12-15 64 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] 
相關問題