java - 简化/优化大量 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 包含什么字符的信息。
解决方案
可以简单地列出您的案例。然后使用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
可以让你的表现变慢但不会太多
推荐阅读
- python - How to get all dimension values in MetricDataResults in CloudWatch
- c - 内存泄漏 C -Valgrind
- kotlin - 可变映射
返回可为空的布尔值?使用键进行值访问 - c# - 使用 C# 将数据保存到 Workday Web 服务时的 XML 序列化问题
- android - 如何在 Android 设备上执行功能测试?
- javascript - 如何在大型标准化 Redux 存储中组织减速器
- bash - 使用 xargs 在 git 别名中显示命令
- animation - 试图让动画在背景图像上方播放
- javascript - 如何清除动态输入字段
- python - Pandas 的数据框无法显示 csv 文件中的非英文字母