我想知道是否有可能生成一个switch statement,它将检查输入的字符串中是否存在子字符串?
我的意思是是:
发布于 2015-08-20 04:00:39
虽然没有这样的构造,但是使用Java-8lambda,您可以创建类似的东西,如果您真的需要的话。我并不是建议你这么做,只是一个概念的证明:
public class SwitchSubstring {
private static final SwitchSubstring DONE = new SwitchSubstring(null) {
@Override
public SwitchSubstring when(String subString, Runnable r) {
return this;
}
@Override
public void orElse(Runnable r) {
}
};
private final String str;
private SwitchSubstring(String str) {
this.str = str;
}
public SwitchSubstring when(String subString, Runnable r) {
if(str.contains(subString)) {
r.run();
return DONE;
}
return this;
}
public void orElse(Runnable r) {
r.run();
}
public static SwitchSubstring of(String str) {
return new SwitchSubstring(str);
}
}用法示例:
SwitchSubstring.of("some test string")
.when("foo", () -> System.out.println("Foo is there!"))
.when("bar", () -> System.out.println("Bar is there!"))
.when("test", () -> System.out.println("Test is there!"))
.orElse(() -> System.out.println("Nothing found"));打印"Test is there!"。
发布于 2016-07-01 12:49:39
如果您不怕钻研一些Java 8 lambda和javaslang,就会有一个干净的解决方案。(爪哇)下面发布的示例使用javaslang大小写谓词验证子字符串:
import org.junit.Test;
import java.util.function.Predicate;
import static javaslang.API.*;
public class JavaSlangSwitchCase {
@Test
public void javaSlangSwitchCaseWithSubstringAB() throws Exception {
Match("BlahABBlah").of(
Case(contains("AB"), o -> run(this::printHasAB)),
Case(contains("CD"), o -> run(this::printHasCD)),
Case($(), o -> run(() -> {
System.out.println("KABOOM!");
}))
);
}
@Test
public void javaSlangSwitchCaseWithSubstringCD() throws Exception {
Match("BlahCDBlah").of(
Case(contains("AB"), o -> run(this::printHasAB)),
Case(contains("CD"), o -> run(this::printHasCD)),
Case($(), o -> run(() -> {
System.out.println("KABOOM!");
}))
);
}
private void printHasAB() {
System.out.println("Has AB");
}
private void printHasCD() {
System.out.println("Has CD");
}
public static <T> Predicate<T> contains(T value) {
return (obj) -> ((String)obj).contains((String) value);
}
}我使用javaslang 2.10-快照。查看javaslang文档的文档
3.6.1。Java匹配的基本原理
干杯,斯蒂芬
发布于 2015-08-19 21:28:39
你是说像这样的事吗?
void findSubstring(String s) {
String lower = s.toLowerCase();
switch (lower) {
case "subStringToFind" :
doSomething();
break;
}
}还是你想让ConstantExpression成为boolean?这是行不通的,因为你正在打开一个String。
https://stackoverflow.com/questions/32105783
复制相似问题