首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用开关语句检查字符串中的子字符串

使用开关语句检查字符串中的子字符串
EN

Stack Overflow用户
提问于 2015-08-19 21:15:08
回答 3查看 7.1K关注 0票数 2

我想知道是否有可能生成一个switch statement,它将检查输入的字符串中是否存在子字符串?

我的意思是是:

  • 在控制台中输入一个字符串
  • 为了便于检查,字符串被修改为所有小写字母。
  • 开关语句检查字符串是否包含特定的子字符串。
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-08-20 04:00:39

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

代码语言:javascript
运行
复制
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);
    }
}

用法示例:

代码语言:javascript
运行
复制
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!"

票数 4
EN

Stack Overflow用户

发布于 2016-07-01 12:49:39

如果您不怕钻研一些Java 8 lambda和javaslang,就会有一个干净的解决方案。(爪哇)下面发布的示例使用javaslang大小写谓词验证子字符串:

代码语言:javascript
运行
复制
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匹配的基本原理

干杯,斯蒂芬

票数 1
EN

Stack Overflow用户

发布于 2015-08-19 21:28:39

你是说像这样的事吗?

代码语言:javascript
运行
复制
void findSubstring(String s) {
  String lower = s.toLowerCase();
  switch (lower) {
    case "subStringToFind" : 
      doSomething();
      break;
  }
}

还是你想让ConstantExpression成为boolean?这是行不通的,因为你正在打开一个String

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32105783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档