我可以在split()中使用String数组来指定分隔符吗?

问题描述 投票:2回答:2

是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
2个回答
1
投票

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

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

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

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);
}
© www.soinside.com 2019 - 2024. All rights reserved.