Предположим, у меня есть эта строка: "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 и для каждого значения проверить, содержится ли оно в моей строке, но в этом случае у меня возникнут проблемы, описанные выше.
Я хотел бы знать, как это сделать, я бы предпочел не использовать для этого какую-либо внешнюю библиотеку.
Ваш вопрос должен включать все необходимые детали. Вы говорите, что в вашем случае получили неправильные результаты, но не объясняете, как вы их получили.




Вы можете использовать разделение с этим регулярным выражением \\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 +"
Спасибо @RobertKock, правильный "\W+" тоже может решить проблему
Спасибо, ребята, за ваши усилия и ваше время, я нашел свое решение и хочу поделиться с вами, ответил ниже
Мое собственное решение:
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}, потому что по умолчанию это один
Вы можете использовать разделение с несколькими разделителями. там - такой же случай, как ваш.