Java String Split на \\ s + и на String Array - PullRequest
1 голос
/ 15 февраля 2020

В этом коде пользователь вводит некоторый текст. Затем его нужно разделить на пробелы - я сейчас использую:

for (String inputSplit : userInput.split("[\\s+]")) { // stuff happens here }

Теперь необходимо также разделить на любой оператор, который хранится в переменной с именем ops.

private String[] ops = {"+", "-", "*", "/", "%", "^"};

Я бы хотел, чтобы он ссылался на операции, в противном случае, если я что-то там изменю, я должен помнить, чтобы изменить это тоже в этой части строки с разделением на строки.

Как я могу просто добавить это к выражению, чтобы оно читало «разделение на пробелы или любой из этих операций»?

например, userInput.split("[\\s+]|[ops]")

Дополнительная информация:

  • Я новичок в Java
  • JDK Amazon Corretto 11
  • IntelliJ IDEA CE 2019.3.2

Ответы [ 4 ]

0 голосов
/ 16 февраля 2020

Вы можете сделать это следующим образом:

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        String[] ops = { "+", "-", "*", "/", "%", "^" };
        String regex = "[\\" + String.join("\\", ops) + "\\s]";
        String userInput = "Arvind Kumar+Avinash 25-10/5*2^4%20";
        System.out.println(Arrays.toString(userInput.split(regex)));
    }
}

Вывод:

[Arvind, Kumar, Avinash, 25, 10, 5, 2, 4, 20]
0 голосов
/ 15 февраля 2020

Вы можете построить String, присоединив массив и затем передав его в регулярное выражение (+|-|*|/|%|^), единственная проблема в том, что вы используете некоторые символы, которые имеют специальное значение в регулярном выражении (например, *) - Клини звезда), и они должны быть экранированы, тогда как другие не должны.

Чтобы сохранить контроль над этим, вы можете сопоставить каждый символ, на который вы хотите разбить строку, с регулярным (частью) выражением, которое должно быть б:

public static final Map<Character, String> opsToRegularExpression = Map.of(
        '+', "\\+",
        '-', "-",
        '*', "\\*",
        '/', "/",
        '%', "%",
        '^', "\\^"
);

public static final String regexpString =
        String.format("\\n+|\\s+|%s", String.join("|", opsToRegularExpression.values()));

// ...

for (String inputSplit : userInput.split(regexpString)) { }
0 голосов
/ 15 февраля 2020

Прежде всего вы можете создать регулярное выражение, а затем использовать его для разделения, как вы хотите.

public class Main {
    public static void main(String[] args) {
        String[] ops = {"+", "-", "*", "/", "%", "^"};
        String separators = "\\s";

        String userInput = "QWE QWSDF DSFDG DFG GSFH GDSG DSFG DSF+6561 AS/DAS 654654 132-6564 ASD*ASD DFGD^FGF";

        for (String separator : ops) {
            separators += "\\" + separator;
        }

        for (String inputSplit : userInput.split("[" + separators + "]")) {
            System.out.println(inputSplit);
        }
    }
}
0 голосов
/ 15 февраля 2020

сохранить разделитель в строке с условием или и передать его

String ops = "\\s+|\+|\-|\*|\/|\%|\^"
userInput.split(ops)
...