Извлечение подстрок из строки

Предположим, у меня есть эта строка: "X1 + X2 = Y3 + Y4 * Y5", из этой строки я хочу получить массив {X1,X2,Y3,Y4,Y5} Моя проблема в том, как справиться со следующим случаем: "X11 + X2 = Y3 + Y4 * Y5", в этом случае я бы получил массив: {X1,X11,X2,Y3,Y4,Y5}, и это неправильно, потому что "X1" не существует.

Я еще не разработал никакого алгоритма, моя идея заключалась в том, чтобы объявить два массива со значениями из X1..XN и Y1..YN и для каждого значения проверить, содержится ли оно в моей строке, но в этом случае у меня возникнут проблемы, описанные выше.

Я хотел бы знать, как это сделать, я бы предпочел не использовать для этого какую-либо внешнюю библиотеку.

Вы можете использовать разделение с несколькими разделителями. там - такой же случай, как ваш.

Alex Samson 13.03.2018 15:02

Ваш вопрос должен включать все необходимые детали. Вы говорите, что в вашем случае получили неправильные результаты, но не объясняете, как вы их получили.

M. Prokhorov 13.03.2018 15:14
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
56
2

Ответы 2

Вы можете использовать разделение с этим регулярным выражением \\P{Alnum}+, которое разделено на любое одно или несколько не буквенно-цифровых, ваше решение может быть:

String text = "X11 + X2 = Y3 + Y4 * Y5";
String[] split = text.split("\\P{Alnum}+");//This equivalent to "[^a-zA-Z\\d]+"

Выходы

[X11, X2, Y3, Y4, Y5]

Возможно, пробелы необязательны. В этом случае я предпочитаю регулярное выражение "\\ W +"

Robert Kock 13.03.2018 15:09

Спасибо @RobertKock, правильный "\W+" тоже может решить проблему

YCF_L 13.03.2018 15:12

Спасибо, ребята, за ваши усилия и ваше время, я нашел свое решение и хочу поделиться с вами, ответил ниже

Frank 13.03.2018 16:45

Мое собственное решение:

String patternString = "[X|Y]{1}\\d+";

        Pattern pattern = Pattern.compile(patternString);
        Matcher matcher = pattern.matcher(text);

        while(matcher.find()) {
            System.out.println(text.substring(matcher.start(), matcher.end()));
        }

[X | Y] {1} \\ d + означает букву X или Y, которая появляется только один раз, после любого количества цифр.

Вы имеете в виду "(X|Y)\\d+", вам не нужно указывать {1}, потому что по умолчанию это один

YCF_L 13.03.2018 17:22

Другие вопросы по теме