2016-12-15 3 views
-1

У меня есть строка с разными значениями, разделенная символом «;» без пробела. Как сохранить первое значение до ";" в ArrayList part1, второе значение в следующий ArrayList и так далее?java: сохранение частей строки в нескольких списках массивов

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

Почему бы не использовать 'String [] Рез = 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. Вероятно, он неправильно понял использование arraylist, поэтому хотел использовать несколько списков. – user3437460

2

Если идея состоит в том, чтобы один список заполнялся d с двойниками из вашей строки, вы можете сделать это в одной строке:

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

Конечно, вы будете иметь дело с исключениями.

2

Предполагая, что вы хотите разобрать двойные значения из строки.

Вот фрагмент кода, который должен делать то, что вам требуется:

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] 
Смежные вопросы