使用Switch语句检查字符串中的子字符串

时间:2015-08-19 21:15:09

标签: java string switch-statement java-8 substring

我想知道是否可以制作switch statement来检查输入的字符串 中是否存在 子字符串?

我的意思

  • 您在控制台中输入字符串
  • 将字符串修改为全部小写字母以便于检查
  • switch语句检查字符串是否包含某个子字符串

3 个答案:

答案 0 :(得分:4)

虽然没有这样的构造,但是如果真的想要,你可以使用Java-8 lambdas创建类似的东西。不是我建议你这样做,只是一个概念验证:

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!"

答案 1 :(得分:0)

你的意思是这样吗?

void findSubstring(String s) {
  String lower = s.toLowerCase();
  switch (lower) {
    case "subStringToFind" : 
      doSomething();
      break;
  }
}

或者您希望ConstantExpression成为boolean?这不起作用,因为您正在启用String

答案 2 :(得分:0)

如果你不害怕潜入某些Java 8 lambda并结合javaslang,那么就会存在一个干净的解决方案。 (javaslang) 下面发布的示例使用javaslang Case谓词验证子字符串:

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-SNAPSHOT。查看javaslang docs的文档 寻找

  

3.6.1。 Java的匹配基础

干杯, 斯蒂芬