首页 > 解决方案 > 简化/优化大量 if...else if...else 语句

问题描述

好的,基本上,我有一些代码使用 contains() 方法来检测两个字符串中是否存在特定字符。对于额外的上下文,这个问题是关于我遇到什么样的问题的一个很好的资源(第三个解决方案也是我为此研究过的东西)。无论如何,这是我的一些代码:

// code up here basically just concatenates different
// characters to Strings: stringX and stringY

if (stringX.contains("!\"#")) {
} else if (stringX.contains("$%&")) {
} else if (stringX.contains("\'()")) {
} else if (stringX.contains("!$\'")) {
} else if (stringX.contains("\"%(")) {
// literally 70+ more else-if statements
}

if (stringY.contains("!\"#")) {
} else if (stringY.contains("$%&")) {
} else if (stringY.contains("\'()")) {
} else if (stringY.contains("!$\'")) {
} else if (stringY.contains("\"%(")) {
// literally 70+ more else-if statements, all of which are
// exactly the same as those working with stringX
}

我对 Java 编程还是很陌生,所以我不确定我应该如何去做。也许这不是问题?另外,如果我可以在不使用 RegEx 的情况下解决这个问题,那就更好了;在这一点上,我对它不是很了解。但如果唯一合理的解决方案是利用它,我显然会这样做。

编辑:所有这些 else-if 语句中的代码彼此之间不会有太大的不同;基本上只是System.out.println()一些关于 stringX/stringY 包含什么字符的信息。

标签: javaperformanceif-statementoptimization

解决方案


可以简单地列出您的案例。然后使用java 8 流过滤器

List<String> pattems = Arrays.asList("!\"#", "$%&", ...);
Optional<String> matched = pattems.stream().filter(p -> stringX.contains(p));
if(matched.isPresent()) {
   System.console().printf(matched.get())
}

java stream可以让你的表现变慢但不会太多


推荐阅读