У меня есть следующий код:
Pattern pattern = Pattern.compile("\\d*\\s*[-\\+\\*/\\$£]");
String input = "3 3 * 4 + 2 /";
Matcher matcher = pattern.matcher(input);
List<String> output = new ArrayList<>();
while (matcher.find()) {
output.add(matcher.group());
}
for(String s : output){
System.out.println(s);
}
Мне очень понравился вывод в моем списке:
3 3 *
4 +
2 /
Увы, мой фактический результат:
3 *
4 +
2 /
Я уверен, что есть мастер регулярных выражений, который может показать мне проблему :)
Поскольку между двумя цифрами существует пробел, вам нужно добавить шаблон, чтобы он соответствовал второй цифре, и сделать его необязательным. А также я предлагаю вам использовать \d+
вместо \d*
потому что \d*
также соответствует пустой строке.
Pattern pattern = Pattern.compile("\\d+(\\s\\d+)?\\s*[-+*/$£]");
String input = "3 3 * 4 + 2 /";
Matcher matcher = pattern.matcher(input);
ArrayList<String> output = new ArrayList<String>();
while (matcher.find()) {
output.add(matcher.group());
}
for(String s : output){
System.out.println(s);
}
Вывод:
3 3 *
4 +
2 /