【问题标题】:Can I use an String array within split() to specifier delimiters?我可以在 split() 中使用字符串数组来指定分隔符吗?
【发布时间】:2020-09-26 15:27:18
【问题描述】:

java/coding 新手并尝试掌握它,所以提前感谢您的帮助!

我有这个字符串“s”,我使用一组运算符作为分隔符进行拆分。

String[] workableParts = s.split("(?<=[-+*/%^=])|(?=[-+*/%^=])");

我将每个拆分存储在 workableParts 数组中,分隔符也存储为数组的一部分 - 例如,输入 7+7 将存储为:

workableParts[0]="7" workableParts[1]="+" workableParts[2]="7"

我也在其他地方使用这个运算符数组:

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

有没有办法可以用它来替换上面拆分中的文本但保持相同的效果?这个想法是,如果我以后添加运算符,我只需在一个地方更新它们。

非常感谢,

山姆

【问题讨论】:

    标签: java arrays split delimiter


    【解决方案1】:

    你可以做这样的事情。定义您自己的 split 方法并在其中构建正则表达式。当您更改 ops 数组时,您将修改正则表达式。

    注意:在放置操作时必须小心,以免它们构造出意外的字符类。例如。 - 应该在前面,^ 不应该在前面。

    static String[] ops = { "-", "+", "*", "/", "%", "^", "=" };
    
    public static void main(String[] args) {
            String s = "7+7-8^2";
    
            String[] workableParts = opSplit(s);        
            System.out.println(Arrays.toString(workableParts));     
    }
    

    打印

    [7, +, 7, -, 8, ^, 2]
    

    方法

    
    public static String[] opSplit(String s) {
        String op = String.join("", ops);
        String regex = "(?<=[" + op + "])|(?=[" + op + "])";
        return s.split(regex);
    }
    

    【讨论】:

    • 谢谢!这正是我需要帮助的地方 - 非常感谢 :)
    【解决方案2】:

    一种可能的选择是使用Arrays.toString(ops); 将字符串数组转换为字符串,并在正则表达式中使用它。 这将返回 [-,+,*,/,...] 形式的字符串。

    现在,您可以将 , 替换为空字符串 "" 并在正则表达式中使用子字符串。

    private String[] ops = {"-","+","*","/","%","^","="};
    String joinedOps = Arrays.toString(strArray);
    joinedOps = joinedOps.substring(1, str.length()-1).replace(",", "");
    String regex = "...."+joinedOps+"...";
    

    【讨论】:

    • "["+String.join("", ops)+"]"。这些工作适用于所询问的案例,但如果^第一个 条目或- 在中间则不行。如果] 是一个运算符,则不是,它在 C、C++、Java、python、js、gawk 和 perl 以及一些 shell 中。当然也不适用于任何多字符运算符。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多