如何遵循DRY原则,判断字符串是否匹配指定字符串集合?
嘿,这两个问题其实是一脉相承的,我来给你拆解清楚!
问题1:如何将一个字符串与一组其他字符串进行比较?
核心思路很简单:把你要对比的目标字符串集合放进一个支持快速查询的容器里,然后直接检查目标字符串是否属于这个集合就行。这种方式比挨个写equals或者==要高效得多,尤其是当集合里的元素变多的时候。
不同编程语言的实现思路一致,举两个常用例子:
- Java:用
HashSet存目标字符串,调用contains()方法判断Set<String> targetStrings = new HashSet<>(Arrays.asList("J", "O", "J_1", "Z")); String input = "J"; boolean isMatch = targetStrings.contains(input); - Python:直接用集合(查询效率比列表高),通过
in关键字判断target_strings = {"J", "O", "J_1", "Z"} input_str = "O" is_match = input_str in target_strings
问题2:替代else if的DRY实现方案
你说得太对了,一堆else if不仅代码臃肿,还完全违反DRY原则——以后要加新的匹配项或者改旧的,你得挨个修改条件,很容易漏改出错。最直接的替代方案就是上面提到的集合包含判断,一步到位,代码简洁还易维护。
先看看反例(违反DRY的写法):
String input = "J_1"; if (input.equals("J")) { // 处理逻辑 } else if (input.equals("O")) { // 处理逻辑 } else if (input.equals("J_1")) { // 处理逻辑 } else if (input.equals("Z")) { // 处理逻辑 }
再看看符合DRY的正例:
Set<String> validStrings = new HashSet<>(Arrays.asList("J", "O", "J_1", "Z")); String input = "J_1"; if (validStrings.contains(input)) { // 这里写统一的匹配逻辑就行 }
如果不同的匹配字符串需要执行不同的业务逻辑,那可以用**映射表(Map)**来存放字符串和对应的处理逻辑,比如Java里用Map存Lambda表达式,Python里用字典存函数:
Map<String, Runnable> actionMap = new HashMap<>(); actionMap.put("J", () -> System.out.println("执行J对应的逻辑")); actionMap.put("O", () -> System.out.println("执行O对应的逻辑")); actionMap.put("J_1", () -> System.out.println("执行J_1对应的逻辑")); actionMap.put("Z", () -> System.out.println("执行Z对应的逻辑")); String input = "O"; if (actionMap.containsKey(input)) { actionMap.get(input).run(); }
这样后续要新增匹配项,只需要往集合或Map里加元素就行,根本不用动判断逻辑,完美贴合DRY的思想。
内容的提问来源于stack exchange,提问作者bcye
相关产品推荐
相关产品推荐

