Java - Десятичное число, минус и математическая операция с разделением регулярных выражений - PullRequest
1 голос
/ 23 февраля 2020

Мне нужно разделить h [0] на первое число ("- 12.0"), h [1] на символ операции (+) и h [2] на второе число (-15.3), но я не знаю, как это работает

a=12.0+-15.3;
h = a.split("(?<=\\d)(?=\\D)|(?<=\\D)(?=\\d)");

Может ли кто-нибудь мне помочь?

1 Ответ

1 голос
/ 23 февраля 2020

Вы можете использовать регулярное выражение для сопоставления * или / в любом месте строки и - и + только тогда, когда они идут после ди 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 демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...