有没有一种方法可以在Java中动态更改if语句中的条件?

有没有一种方法可以在Java中动态更改if语句中的条件?,java,conditional,Java,Conditional,我的代码过滤字符串str,只保留一些字符,从而减少字符串fStr。微妙之处在于我只保留一个目标char,如果它不等于fStr中的最后一个char: 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)

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

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++;
        }
    }
}  
但是,有没有一种更优雅、更少烦人的方式来动态截断条件语句呢

有没有一种方法可以在Java中动态更改if语句中的条件

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

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

另外,循环的
char[]
和显式
可能比
ArrayList.contains
更快

有没有一种方法可以在Java中动态更改if语句中的条件

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

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


另外,一个
char[]
和一个显式
for
循环可能比
ArrayList.contains

更快。确实有,只需调用一个函数,返回在if条件下使用的布尔值。使用函数指针可以在不同的时间调用不同的函数。

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

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

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;
}   
}
公共类示例{
公共静态void main(字符串[]args){
char[]targetcars={'a','b','c'};
字符串str=“axxbxxbxcxa”,fStr=”“;
对于(int i=0;i
以下是我的做法,但不确定是否适合您的需要

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;
}   
}
公共类示例{
公共静态void main(字符串[]args){
char[]targetcars={'a','b','c'};
字符串str=“axxbxxbxcxa”,fStr=”“;
对于(int i=0;i
记录完每个字符后,为什么不将其存储在某个变量中并继续引用它?@Constantin我理解你的意思,这在这里是可行的。但这只是一个例子,我想知道,一般来说,是否有某种机制来处理这样的情况,其中初始条件更复杂。如果您不想使用s,您可以尝试类似于if(fStr.charAt(fStr.length()-1)!=c)。。。但是你必须注意空的fStr@Constantin您仍然需要检查
fStr.length()!=0
是,没错。。。你只是在寻找一个优雅的解决方案吗?在你记录每个字符之后,为什么不把它存储在某个变量中并不断引用它呢?@Constantin我明白你的意思,这在这里是可行的。但这只是一个例子,我想知道,一般来说,是否有某种机制来处理这样的情况,其中初始条件更复杂。如果您不想使用s,您可以尝试类似于if(fStr.charAt(fStr.length()-1)!=c)。。。但是你必须注意空的fStr@Constantin您仍然需要检查
fStr.length()!=0
是,没错。。。你只是在寻找一个优雅的解决方案吗?这并不能回答问题,因为你说的只是把条件埋在一个方法中,而不是解决问题,这个方法必须在内部做同样的事情…我看到你错过了关于使用函数指针和更改指针指向的函数的部分,对某些条件的反应。这是一个标准的习惯用法。那么你能扩展一下吗?我不知道Java中的函数指针是什么?你能举个例子吗?Java不知道函数指针的概念。我想你说的是C。函数指针的概念是用接口类在Java中模拟的。这并不能回答问题,因为你说的只是把条件埋在一个方法中,这并不能解决问题,该方法必须在内部执行相同的操作……我发现您错过了关于使用函数指针并根据特定条件更改指针指向的函数的部分。这是一个标准的习惯用法。那么你能扩展一下吗?我不知道Java中的函数指针是什么?你能举个例子吗?Java不知道函数指针的概念。我想你说的是C。函数指针的概念是在Java中使用接口类模拟的。