Нулевые символы при попытке разбить строку в Java? И как это исправить? - PullRequest
0 голосов
/ 26 октября 2019

Я пытаюсь разбить строку следующим образом:

stringNumbers = "12.34+345.56+45-87.90*43.00";
String[] Operators = stringNumbers.split("[0-9.]");

в консоли, когда я печатаю операторы, я получаю это:

[, , , , , +, , , , , , +, , -, , , , , *]

Нулевые символы не являются моими желаемымивыход. Почему я получаю нулевые символы и как решить проблему?

Ответы [ 3 ]

3 голосов
/ 26 октября 2019

Это потому, что вы разделяете на один символ, вам придется делать это с нетерпением:

String[] Operators = stringNumbers.split("[0-9.]*");

Или вы можете отфильтровать результаты:

String[] Operators = Arrays.stream(stringNumbers.split("[0-9.]"))
    .filter(str -> !str.equals(""))
    .toArray(String[]::new);
0 голосов
/ 26 октября 2019

Другой вариант - просто собрать эти числа с помощью простого выражения, такого как:

\\d+(?:\\.\\d+)?

Тест

import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class RegularExpression{

    public static void main(String[] args){

        final String regex = "\\d+(?:\\.\\d+)?";
        final String string = "12.34+345.56+45-87.90*43.00\n"
             + "12+345+45.8-87*43";

        final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
        final Matcher matcher = pattern.matcher(string);

        while (matcher.find()) {
            System.out.println("Full match: " + matcher.group(0));
            for (int i = 1; i <= matcher.groupCount(); i++) {
                System.out.println("Group " + i + ": " + matcher.group(i));
            }
        }

    }
}

Вывод

Full match: 12.34
Full match: 345.56
Full match: 45
Full match: 87.90
Full match: 43.00
Full match: 12
Full match: 345
Full match: 45.8
Full match: 87
Full match: 43

Если вы хотите упростить / изменить / изучить выражение, это было объяснено на верхней правой панели regex101.com . При желании вы также можете посмотреть в эту ссылку , как она будет сопоставляться с некоторыми примерами входных данных.


RegEx Circuit

jex.im визуализирует регулярные выражения:

enter image description here

0 голосов
/ 26 октября 2019
String stringNumbers = "12.34+345.56+45-87.90*43.00";
String[] Operators = Arrays.stream(stringNumbers.split("[0-9.]+"))
                .filter(str -> !str.equals(""))
                .toArray(String[]::new);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...