根据不同的条件分割字符串[需要优化]

时间:2019-01-22 05:10:18

标签: java java-8

我有一个输入字符串,如果该字符串包含elseif,则需要将该字符串拆分为多行,如预期输出所示。

if ((tag eq 200)) then
    set weight 200
elseif ((tag eq 300)) then
    set weight 300
elseif ((tag eq 400)) then
    set weight 400
elseif ((tag eq 250)) then
    set weight 0
else pass endif

我已经实现了下面的代码以如上所示拆分。它给出了预期的结果。但是下面的代码不是经过优化的。有人可以建议对下面的代码进行任何优化。

public class Test {

    public static void main(String[] args) {
        String str = "if ((tag eq 200)) then set weight 200  elseif ((tag eq 300)) then set weight 300  elseif ((tag eq 400)) then set weight 400 elseif ((tag eq 250)) then set weight 0 else pass endif";
        System.out.println(str);

        if(str.contains("elseif")) {
            int lastIndex = str.lastIndexOf("then");
            String subString = str.substring(0, lastIndex + 4);
            splitTextByThen(subString);
            String subString1 = str.substring(lastIndex+4 , str.length());
            splitTextByElseIfOrElse(subString1);
        }
    }

    public static void splitTextByThen(String input) {
        String[] arr = input.split("then");
        for (int i = 0; i < arr.length; i++) {
            splitTextByElseIfOrElse(arr[i] + "then");
        }
    }

    public static void splitTextByElseIfOrElse(String input) {
        ArrayList<String> al = new ArrayList<>();
        if(input.contains("elseif")) {
            String[] arr = input.split("elseif");
            al.add(arr[0]);
            al.add("elseif " +arr[1]);
        }else if (input.contains("else")) {
            String[] arr = input.split("else");
            al.add(arr[0]);
            al.add("else " +arr[1]);
        }
        else {
            al.add(input);
        }

        for (String string : al) {
            System.out.println(string);
        }
    }
}

1 个答案:

答案 0 :(得分:3)

如果使用正则表达式,您的代码看起来会更简单(更易读):

String result = str.replaceAll(" (?=elseif|else)", "\n")
                   .replaceAll("(?<=then) ", "\n    ");

此操作使用先行匹配空格,后跟elseifelse,用\n替换,并后退匹配以匹配then后的空格,并用{{ 1}},后接4个空格。

其输出是:

\n