Вы можете использовать регулярное выражение для сопоставления *
или /
в любом месте строки и -
и +
только тогда, когда они идут после ди git. В случае выражения совпадения вы можете сопоставить +
или -
после слова char, поэтому, в основном, вы можете проверить наличие границы слова слева: [/*]|\b[-+]
.
См. Демонстрационную версию regex .
Затем просто разбейте и сохраните совпадения:
public static final Pattern regex = Pattern.compile("[/*]|\\b[-+]");
public static List<String> split(String s, Pattern pattern) {
Matcher m = pattern.matcher(s);
List<String> ret = new ArrayList<String>();
int start = 0;
while (m.find()) {
ret.add(s.substring(start, m.start()));
ret.add(m.group());
start = m.end();
}
if (start >= s.length()) {
ret.add(s.substring(start));
}
return ret;
}
Пример использования:
String s = "12.0+-15.3*-45.7/+67.9";
List<String> res = split(s, regex);
System.out.println(res);
// => [12.0, +, -15.3, *, -45.7, /]
См. Java демо