Если вы хотите split вашей исходной строки, то правильное регулярное выражение, например, " +(?=\\d{1,3}|[+-])"
, что означает:
- Последовательность пробелов (я добавил "+" к разделить также в случае (несколько пробелов между токенами).
- Позитивный прогноз - от 1 до 3 цифр или плюс или минус.
Другой возможный подход это найти все совпадения . Тогда регулярное выражение может быть, например, "\\d{1,3}|[-+]"
, что означает:
- Альтернатива 1: последовательность из 1 до 3 цифр.
- Альтернатива 2: плюс или минус.
Ниже приведен пример программы:
import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.ArrayList;
import java.util.List;
public class Simple{
public static void main(String args[]){
String str = "22 24 +";
// Variant 1 - split
String [] outArr = str.split(" +(?=\\d{1,3}|[+-])");
System.out.println(Arrays.toString(outArr));
// Variant 2 - find all matches
List<String> allMatches = new ArrayList<String>();
Matcher m = Pattern.compile("\\d{1,3}|[-+]").matcher(str);
while (m.find()) {
allMatches.add(m.group());
}
System.out.println(Arrays.toString(allMatches.toArray()));
}
}
В обоих вариантах выведите [22, 24, +]
- список результатов.