62,614
社区成员
发帖
与我相关
我的任务
分享
public static void main(String[] args) {
String str = "{if(A&&B){if(B&&C){if(D&&E){X1=1;X2=2;X=3}else if(F&&G){X1=4;X=5;X3=6}else if(H&&I){X1=40;X=50;X3=60}}else if(K&&L){X1=400;X=500;X3=600}}}";
str = str.replaceAll("else", "");
List<String> strList = new ArrayList<String>();
Stack<Character> stack = new Stack<Character>();
char[] charArray = str.toCharArray();
for(int i = 0; i < charArray.length; i++){
if(charArray[i] == ' ') continue;
stack.push(charArray[i]);
if(charArray[i] == '}'){
splitString(strList, stack);
}
}
for(String obj : strList){
System.out.println(obj);
}
}
private static void splitString(List<String> strList, Stack<Character> stack) {
if(stack == null || stack.isEmpty()) return ;
int count = sumLeftKuoHao(stack);
char c = stack.pop();
c = stack.peek();
if(c == '{'){
int endIndex = 0;
while(!stack.isEmpty()){
c = stack.pop();
if(c == '{') endIndex++;
if(endIndex == 2){
stack.push(c);
break;
}
}
}else{
StringBuilder sb = new StringBuilder();
for(int i = 0 ; i < count; i++){
sb.append("}");
}
int endIndex = 0;
while(true){
c = stack.pop();
if(c == '{') endIndex++;
if(endIndex == 2){
stack.push(c);
break;
}else{
sb.append(c);
}
}
String suffix = sb.reverse().toString();
sb.delete(0, suffix.length());
Character[] cArr = new Character[stack.size()];
cArr = stack.toArray(cArr);
for(char ch : cArr){
sb.append(ch);
}
strList.add(sb.toString() + suffix);
}
}
private static int sumLeftKuoHao(Stack<Character> stack) {
if(stack == null || stack.isEmpty()) return 0;
int sum = 0;
Character[] cArr = new Character[stack.size()];
cArr = stack.toArray(cArr);
for(char c : cArr){
if(c == '{') sum++;
}
return sum;
}
import java.io.*;
import java.util.Arrays;
public class Test {
public static void main(String[] args) throws IOException {
String s= "{if(A&&B){if(B&&C){if(D&&E){X1=1;X2=2;X=3}" +
"else if(F&&G){X1=4;X=5;X3=6}else if(H&&I){X1=40;X=50;X3=60}}}";
String[] str = s.split("else");
System.out.println(Arrays.toString(str));
}
}
import java.util.regex.*;
public class Split {
public static void main(String args[])
{
String regex1="\\{(.+)\\{(.+)\\{(.+)\\{(.+)\\}else (.+)\\{(.+)\\}else (.+)\\{(.+)\\}\\}\\}\\}";
String str="{if(A&&B){if(B&&C){if(D&&E){X1=1;X2=2;X=3}else if(F&&G){X1=4;X=5;X3=6}else if(H&&I){X1=40;X=50;X3=60}}}}";
String last=null;
Matcher m=Pattern.compile("\\{(if\\(\\w\\&\\&\\w\\))\\{(if\\(\\w\\&\\&\\w\\))\\{(.+)\\}\\}\\}").matcher(str);
while(m.find())
{
for(int j=0;j<=m.groupCount();j++)
System.out.println(m.group(j)+" ");
last=m.group(m.groupCount());
}
String s[]=last.split("else ");
for(int j=0;j<s.length;j++)
System.out.println(s[j]);
}
}
import java.util.regex.*;
public class Split {
public static void main(String args[])
{
String str="{if(A&&B){if(B&&C){if(D&&E){X1=1;X2=2;X=3}else if(F&&G){X1=4;X=5;X3=6}else if(H&&I){X1=40;X=50;X3=60}}}}";
Matcher m=Pattern.compile("\\{(.+)\\{(.+)\\{(.+)\\{(.+)\\}else (.+)\\{(.+)\\}else (.+)\\{(.+)\\}\\}\\}\\}").matcher(str);
while(m.find())
{
for(int j=1;j<=m.groupCount();j++)
System.out.println(m.group(j)+" ");
}
}
}
/**
* 基本思路: else分割,替换最后一个if里面的表达式, 分割多少长度,就有多少种组合
*/
public static void get3() {
// 是否匹配
int len = -1;
// 替换正则,当字符串的规则变化时,正则也要做相应的修改
String reg = "if\\(\\w\\&\\&\\w\\)\\{(\\w\\d?\\=\\d\\d*;?){3}\\}";
String s = "if(A&&B){if(B&&C){if(D&&E){X1=1;X2=2;X=3}else" +
" if(F&&G){X1=4;X=5;X3=6}else if(H&&I){X1=40;X=50;X3=60}}else" +
" if(K&&L){X1=400;X=500;X3=600}}";
String s1 = "{if(A&&B){if(B&&C){if(D&&E){X1=1;X2=2;X=3}else if(F&&G){X1=4;X=5;X3=6}else if(H&&I){X1=40;X=50;X3=60}}}";
String[] arr = s1.split("else");
if (arr.length == 0) {
System.out.println("no");
return;
}
if (arr.length == 1) {
System.out.println(arr[0]);
return;
}
for (int i = 0; i < arr.length; i++) {
if (i == 0 && len < 1) {
System.out.println(arr[0].trim());
Matcher m = Pattern.compile(reg).matcher(arr[0].trim());
if (m.find()) {
len = arr[0].indexOf(m.group());
}
} else {
if (len > 1) {
//除掉最后一个}
if(i == arr.length - 1){
System.out.println(arr[0].substring(0, len) + arr[i].trim().substring(0, arr[i].trim().length() - 1));
continue;
}
System.out.println(arr[0].substring(0, len) + arr[i].trim());
} else {
System.out.println("字符串规则不对,重写正则!");
}
}
}
}