我有一个输入字符串,如果该字符串包含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);
}
}
}
答案 0 :(得分:3)
如果使用正则表达式,您的代码看起来会更简单(更易读):
String result = str.replaceAll(" (?=elseif|else)", "\n")
.replaceAll("(?<=then) ", "\n ");
此操作使用先行匹配空格,后跟elseif
或else
,用\n
替换,并后退匹配以匹配then
后的空格,并用{{ 1}},后接4个空格。
其输出是:
\n