当前位置: 首页 > 知识库问答 >
问题:

分配字符串值的任何更好的方法,消除Java中的多个如果其他块

华永新
2023-03-14

我想分配一个字符串常量的基础上其他字符串值是作为一个参数从其他程序发送。如下所示的测试是从主程序发送的字符串变量,在这个助手方法中,我需要比较和分配一些其他字符串值,并将结果发送回主程序

例如:

public String assignString(String test){ 
String returnString = new String();
if(test.startsWith("hi"))
  returnString  = "Condition 1";
else if(test.startsWith("hello"))
  returnString  = "Hello Welcome";
else if(test.startsWith("Sunday"))
  returnString  = "Today is Sunday";
else if(test.startsWith("monday"))
  returnString  = "today is Monday";
else{
returnString  = "today is good day";
}

return returnString;
}

上述方法是一种方法。其他方法是使用Switch语句,但我正在尝试寻找任何其他替代方法和更好的方法来实现相同的解决方案。

我对很多if-Else语句及其繁琐的维护感到不满意。在上面的例子中,我只使用了3个,但在实时应用程序中,我需要进行15次以上的检查。

请提前提出建议并表示感谢

共有3个答案

秦炜
2023-03-14

如果你可以不使用字符串。从开始,您可以尝试以下方法:

private static final Map<String, String> greetings = new HashMap<>();

static {
    greetings.put("hi", "Condition 1");
    greetings.put("hello", "Hello Welcome");
    greetings.put("sunday", "Today is Sunday");
    greetings.put("monday", "today is Monday");
}

public String assignString(String test) {
    return greetings.getOrDefault(test.toLowerCase(), "today is good day");
}
狄宜然
2023-03-14

与if-else相同的逻辑,但具有正确格式的嵌套三元运算符,可以如下所示:

public static String assignString(String test){         
    return   test.startsWith("hi")      ?"Condition 1"
            :test.startsWith("hello")   ?"Hello Welcome"
            :test.startsWith("Sunday")  ?"Today is Sunday"
            :test.startsWith("monday")  ?"today is Monday"
            :"today is good day";        
}
乐正浩博
2023-03-14

戴夫·牛顿的建议很好

另一种接近的方法是引入一个具有两种方法的类:

  • 布尔匹配(字符串测试)

这种方式避免了地狱般的切换情况,但也允许隔离逻辑规则。通过这种方式,您可以轻松地对其进行单元测试,还可以重用该类进行类似的处理,因为它有一个广泛的契约匹配器
如果有意义,您甚至可以引入规则接口。

public class RuleImpl { 

    private String startPattern;
    private String value;

    public RuleImpl(String startPattern, String value){
       this.startPattern = startPattern;
       this.value = value;
    }

    public boolean matches(String test){ 
       if(test.startsWith(startPattern)){
           return true;
       }
         return false;
    }

    public String getValue(){
        return value;
    }
}

你现在可以写:

List<RuleImpl> rules = Arrays.asList(
                       new RuleImpl("monday", "today is Monday"),
                       new RuleImpl("hello",  "Hello Welcome"),
                       new RuleImpl("Sunday", "Today is Sunday")
                       );

现在的处理可能是:

String test = "string to test";

for (RuleImpl rule : rules){       
   if (rule.matches(test)){
      return rule.getValue();
   }
 } 
 return null;
 类似资料:
  • 问题内容: 哪种资本化方法更好? 矿: 要么 公用语言-StringUtils.capitalize: 我认为我更好,但我宁愿问。 问题答案: 表现是平等的。 您的代码复制了char []调用和。 关于Apache代码和。apache代码有一个额外的字符串实例,该实例具有基本char [1,length]内容。但这在创建实例String时不会被复制。

  • 想改进这个问题吗?通过编辑这篇文章添加细节并澄清问题。 我有一个java字符串,它看起来像“itemId”:“{20044683-1111-D322-9A0B-9920EF6E9991}”,如何获取大括号之间的字符串,包括大括号?

  • 问题内容: 我正在尝试用多个其他单词替换字符串中的多个单词。字符串是“我有一只猫,一只狗和一只山羊”。 但是,它不会产生“我有一只狗,一只山羊和一只猫”,而是会产生“我有一只猫,一只猫和一只猫”。在JavaScript中是否可以同时用多个其他字符串替换多个字符串,以便产生正确的结果? 问题答案: 具体解决方案 您可以使用一个函数替换每个函数。 概括它 如果您要动态维护正则表达式并仅将将来的交换添加

  • 我正在尝试用多个其他单词替换字符串中的多个单词。绳子是“我有一只猫,一只狗,和一只山羊。” 然而,这并不产生“我有一只狗,一只山羊,一只猫”,而是产生“我有一只猫,一只猫,一只猫”。是否可以在JavaScript中同时用多个其他字符串替换多个字符串,从而产生正确的结果?

  • 问题内容: 我尝试在线搜索以解决此问题,但未找到任何内容。 我编写了以下抽象代码来解释我的要求: 方法splitByNumber每4个字符分割一次字符串“ text”。我如何创建此方法? 非常感谢 问题答案: 我认为他想要的是将一个字符串分成大小为4的子字符串。然后我将在循环中执行此操作:

  • 问题内容: 我想使用Java删除字符串中所有类型的方括号字符(例如:[],(),{})。 我尝试使用此代码: 但这不起作用,请帮助我。 问题答案: 要删除 _ 所有标点符号_ ,包括所有方括号,大括号和方括号…,按问题是: