Разделить строку с помощью метода split - PullRequest
0 голосов
/ 12 октября 2019

Я пытался разделить строку, используя метод split, но я столкнулся с некоторой проблемой при использовании метода split.

String str="1-DRYBEANS,2-PLAINRICE,3-COLDCEREAL,4-HOTCEREAL,51-ASSORTEDETHNIC,GOURMET&SPECIALTY";

List<String> zoneArray = new ArrayList<>(Arrays.asList(zoneDescTemp.split(",")));

Фактический результат:

zoneArray = {"1-DRYBEANS","2-PLAINRICE","3-COLDCEREAL","4-HOTCEREAL","51-ASSORTEDETHNIC","GOURMET&SPECIALTY"}

Ожидаемый результат:

zoneArray = {"1-DRYBEANS","2-PLAINRICE","3-COLDCEREAL","4-HOTCEREAL","51-ASSORTEDETHNIC,GOURMET&SPECIALTY"}

Буду признателен за любую помощь.

Ответы [ 2 ]

3 голосов
/ 12 октября 2019

Используйте в своем регулярном выражении упреждающий просмотр, который использует запятую (не в упреждающем просмотре), за которой следует число (в предвкушении). \\d+ будет достаточно для числа. Регулярное выражение может выглядеть следующим образом:

String regex = ",(?=\\d+)";

Например:

public class Foo {
    public static void main(String[] args) {
        String str = "1-DRYBEANS,2-PLAINRICE,3-COLDCEREAL,4-HOTCEREAL,51-ASSORTEDETHNIC,GOURMET&SPECIALTY";
        String regex = ",(?=\\d+)";
        String[] tokens = str.split(regex);
        for (String item : tokens) {
            System.out.println(item);
        }
    }
}

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

Для получения дополнительной информации о прогнозном просмотре, предварительном просмотре и осмотре обращайтесь к этой соответствующей странице учебного пособия .

3 голосов
/ 12 октября 2019

Использование split(",(?=[0-9])")

Вы не просто разделяете запятой, но разделяете запятой, только если за ней следует цифра от 0 до 9. Это также известно как положительный прогноз (? =) .

Взгляните на этот фрагмент кода, например:

public static void main(String[] args) {
        String str="1-DRYBEANS,2-PLAINRICE,3-COLDCEREAL,4-HOTCEREAL,51-ASSORTEDETHNIC,GOURMET&SPECIALTY";

        String[] array1= str.split(",(?=[0-9])");
        for (String temp: array1){
            System.out.println(temp);
        }
    }
}
...