Разделить строковый массив на несколько массивов - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть массив String [], который содержит строку с тремя точками данных, разделенными символом ":", как следующая строка:

SNSD_OOT: 511: 127

Мне нужно извлечь эти значения из массива String []. Я пытался использовать statusOxymetry [i] = Arrays.toString (valuesOxymetry [i] .split (":")); Однако я получаю следующие данные. Мне нужно сохранить каждый элемент в массив.

[SNSD_OOT, 511, 127]

Моя цель - закончить с 3 массивами, один, где появляется что-то перед первым «:», другой для данных после первого «:», и последний для данных после второго «:»

1stArray[0] = SNSD
2ndArray[0] = 511
3rdArray[0] = 127

Мне нужно отделить первый, второй и третий элемент в отдельный массив каждый. Я немного растерялся из-за того, как сделать это правильно.

                    String[] valuesOxymetry = message.getData().getString("raw"));
                    int total = valuesOxymetry.length - 2;

                    String[] statusOxymetry = new String[total];
                    String[] hrmOxymetry = new String[total];
                    String[] spo2Oxymetry = new String[total];

                    //ignore first two data points (timestamp)
                    for(int i = 2; i < total; i++) {
                        System.out.println("Pulse values: " + valuesOxymetry[i]);
                        statusOxymetry[i] = Arrays.toString(valuesOxymetry[i].split(":"));
                        System.out.println("Only status " + statusOxymetry[i]);

                    }

Ответы [ 3 ]

3 голосов
/ 22 апреля 2020

Метод String.split возвращает массив. Сохраните этот массив в новой переменной и используйте эту новую переменную:

String[] splitValues = valuesOxymetry[i].split(":")

statusOxymetry[i] = splitValues[0]; // SNSD_OOT
hrmOxymetry[i] = splitValues[1];    // 511
spo2Oxymetry[i] = splitValues[2];   // 127

Тем не менее, может быть, есть более чистый способ сделать это. Например, вы можете создать класс, который представляет записи данных как независимые объекты, вместо того, чтобы разбивать данные по «параллельным массивам».

2 голосов
/ 22 апреля 2020

Должно быть:

for(int i = 2, j = 0; i < total; i++, j++) {
    System.out.println("Pulse values: " + valuesOxymetry[i]);

    String[] values = valuesOxymetry[i].split(":");
    statusOxymetry[j] = values[0];
    hrmOxymetry   [j] = values[1];
    spo2Oxymetry  [j] = values[2];
}
1 голос
/ 22 апреля 2020

Вы можете сделать это:

public static void main(String[] ar) throws Exception{

    String dataraw = "SNSD_OOT:511:127";

    //take every array from result list
    //print first element
    toListStringArray(dataraw)
        .forEach(
            e -> System.out.println(e[0])
        );

}

public static List<String[]> toListStringArray(String dataraw){

    //split string
    String[] dataArray = dataraw.split(":");

    //list which contains all arrays
    List<String[]> result = new ArrayList<>();

    //take every element from split
    //put into an array which will contains only that element
    //put array in list
    for(String e : dataArray){
        result.add(new String[]{e});
    }

    return result;

}

Я не понимаю, зачем это делать. Также рекомендую посмотреть на @Joni ответ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...