有一个任意的字符串比如String="package san;public class sanjiaox { /**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
sanjiaox a=new sanjiaox();
int v=a.ss(3, 2, 1.5);
System.out.println(v); }
public int ss(double a,double b,double c){
if((a+b)>c&&(b+c)>a&&(a+c)>b){
//判断是不是三角形
if(b==c&&c==a){
return 1;

}
if((b==c)||(c==a)||(b==a)){
return 2;
}
else{
return 3;
}


}
else {
return 0;
}


}}"把这个代码当做一个字符串截取出来if后面的判断语句比如第一个遇到if我就截取出if后面的((a+b)>c&&(b+c)>a&&(a+c)>b)这个字段遇到第二个if截取(b==c&&c==a)这个字段再将各判断包含的逻辑表达式分解出来,分开输出,如第2个判断可分解成两个逻辑表达式:b==c和c==a 最后的输出来的显示格式结果要像这样if
if 
(a+b)>c和(b+c)>和(a+c)>b
 b==c和c==a
 b==c或者c==a或者 b==a各位大神帮帮忙啊我想了好久想不来帮帮忙啊StringJAVA

解决方案 »

  1.   

    楼主参考一下:
    public class TruncateString { String s = ""; public TruncateString() {
    s = "";
    } public TruncateString(String s) {
    super();
    this.s = s;
    } public String getS() {
    return s;
    } public void setS(String s) {
    this.s = s;
    } public String[] getString(String judge) {
    String[] resultString = { "", "" };// 存结果 int len = judge.length();
    int position = 0;
    while (true) {
    int index = s.indexOf(judge, position);// 持续查找 类似"if" 的字符串位置。
    if (index < 0)// 没有了。
    {
    break;
    }
    position = index;
    //System.out.println("position is " + position);// 测试用,输出位置
    resultString[0] += judge + "\r\n";// "if"存入数组
    resultString[1] += getJudge(position, len) + "\r\n";// 结果存入数组。
    if (position + len >= s.length())// 到文件尾了,退出。
    {
    break;
    }
    position += len;// 从if后面继续找
    }
    return resultString;// 以数组形式返回。
    } //找到if 后面的条件表达式,替换 "&&" 和 "||".
    //
    public String getJudge(int position, int len) {
    int newP = position + len;
    String r = "";
    int numberOfBrackets = 0;
    while (s.charAt(newP++) != '(') {
    continue;
    }
    numberOfBrackets++;
    position = newP - 1;
    while (numberOfBrackets != 0) {
    while (newP + 1 < s.length()) {
    char c = s.charAt(newP++);
    if (c == '(') {
    numberOfBrackets++;
    break;
    } else if (c == ')') {
    numberOfBrackets--;
    break;
    }
    }
    }
    r = s.substring(position, newP);
    r = r.replaceAll("\\&\\&", "和").replaceAll("\\|\\|", "或者");
    r = r.trim().substring(1, r.length()-1);//去掉多余空格和首尾括号
    return r;
    } public static void main(String[] args) {
    String s = "package san;" + "" + "public class sanjiaox {" + "" + "/**"
    + " * @param args" + " */"
    + "public static void main(String[] args) {"
    + "// TODO Auto-generated method stub"
    + "sanjiaox a=new sanjiaox();" + "int v=a.ss(3, 2, 1.5);"
    + "System.out.println(v);" + "" + "}"
    + "public int ss(double a,double b,double c){"
    + "if((a+b)>c&&(b+c)>a&&(a+c)>b){" + "//判断是不是三角形"
    + "if(b==c&&c==a){" + "return 1;" + "" + "}"
    + "if((b==c)||(c==a)||(b==a)){" + "return 2;" + "}" + "else{"
    + "return 3;" + "}" + "" + "" + "}" + "else {" + "return 0;"
    + "}" + "" + "" + "}" + "" + "};";
    TruncateString ts = new TruncateString(s);
    String[] ss = ts.getString("if");
    System.out.println(ss[0] + ss[1]);
    //System.out.println("end");
    }
    }结果:
    if
    if
    if
    (a+b)>c和(b+c)>a和(a+c)>b
    b==c和c==a
    (b==c)或者(c==a)或者(b==a)
      

  2.   

    有没有更好的可以根据任由的一个代码变成字符串在代码要在任由字符串中都能实现这个案例最理想的输出结果为if的判断条件有:
    1.(a+b)>c和(b+c)>和(a+c)>b
    2.b==c和c==a
    3.b==c或者c==a或者 b==a
    4...........
    大神们小弟在多参考几份各位大神的见解,以便于拓展思路