有没有办法在Java中动态更改if语句中的条件?

时间:2016-03-27 01:44:47

标签: java conditional

我有这个代码过滤字符串str,只保留一些chars,导致字符串fStr减少。细微之处在于我只保留目标char,如果它不等于char中的最后一个fStr

ArrayList<Character> targetChars = //{a, b, c};
String str = "axxbxxxxbxbxcxa", fStr = "";

for(int i = 0, s = 0 ; i < str.length() ; i++) {
    char c = str.charAt(i);
    if(targetChars.contains(c)) {
        if(s > 0 && fStr.charAt(s-1) != c) {
            fStr += c;
            s++;
        }
    }
}  
  

fStr→“abca”

在最里面的if语句中,我必须在s > 0之前加入fStr.charAt(s-1) != c,否则后者会在第一次OutOfBounds时引发targetChars.contains(c)例外true。但只是第一次,它让我很恼火,循环将始终检查我不会出界,因为它只需要做一次。我知道我可以做那样的事情:

ArrayList<Character> targetChars = //{a, b, c};
String str = "auebskrubnbocpa", fStr = "";
int i = 0, s = 0;   

for(; i < str.length() ; i++) {
    char c = str.charAt(i);
    if(targetChars.contains(c)) {
            fStr += c;
            s++;
            i++;
            break;
    }
}

for(; i < str.length() ; i++) {
    char c = str.charAt(i);
    if(targetChars.contains(c)) {
        if(fStr.charAt(s-1) != c) {
            fStr += c;
            s++;
        }
    }
}

但是,是否有一种更优雅,更不烦人​​的动态截断条件语句的方法?

3 个答案:

答案 0 :(得分:2)

  

有没有办法动态更改Java中if语句的条件?

不,没有。从可读性的角度来看,您的代码的原始版本是最好的。

但是,如果您担心效率,那么您应该使用StringBuilder而不是fStr += c

此外,char[]和明确的for循环可能比ArrayList<Character>.contains更快。

答案 1 :(得分:1)

以下是我将如何做,但不确定它是否适合您的需求

public class Example {

public static void main(String[] args) {
    char[] targetChars = {'a', 'b', 'c'};
    String str = "axxbxxxxbxbxcxa", fStr = " ";

    for(int i = 0 ; i < str.length() ; i++) {
        char c = str.charAt(i);
        if(isAcceptableChar(c, targetChars)) {

            if(fStr.charAt(fStr.length() - 1) != c) {
                fStr = fStr.trim() + c;
            }
        }
    }

    System.out.println(fStr);       
}


private static boolean isAcceptableChar(char newChar, char[] targetChars) {
    boolean value = false;

    for(char ch : targetChars){
        if(ch == newChar) {
            value = true;
            break;
        }
    }
    return value;
}   
}

答案 2 :(得分:0)

当然有,只需调用一个返回你在if条件中使用的布尔值的函数。可以使用函数指针在不同时间调用不同的函数。