有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java字符串按\\s+和字符串数组拆分

在此代码中,用户将输入一些文本。然后需要按空格分隔-我目前使用:

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

现在它还需要被存储在名为ops的变量中的任何运算符拆分

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

我想保持它引用ops,否则如果我在那里更改了某些内容,我必须记住在这个字符串分割部分也要更改它

我怎样才能把它添加到表达式中,使其读作“按空格或这些操作中的任何一个拆分”

例如userInput.split("[\\s+]|[ops]")

额外信息:

  • 我是Java新手
  • JDK亚马逊Corretto 11
  • IntelliJ IDEA CE 2019.3.2

共 (3) 个答案

  1. # 1 楼答案

    使用或条件以字符串形式存储分隔符并传递它

    String ops = "\\s+|\+|\-|\*|\/|\%|\^"
    userInput.split(ops)
    
  2. # 2 楼答案

    您可以通过加入数组来构建一个String,然后将其传递给正则表达式(+|-|*|/|%|^),唯一的问题是您正在使用一些在正则表达式中具有特殊意义的字符(如*-kleen star),这些字符应该转义,而其他字符则不应该转义

    要保持对此的控制,可以将要拆分字符串的每个字符映射到应使用的正则(部分)表达式:

    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)) { }
    
  3. # 3 楼答案

    首先,您可以构造正则表达式,然后使用它来分隔所需的方式

    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);
            }
        }
    }