2015-08-19 72 views
1

我是Java新手,所以我想知道是否可以创建一个switch语句来检查输入字符串中是否存在子字符串?我的意思是你在控制台中输入一个字符串,然后为了便于检查而使字符串的副本全部小写,最后一个switch语句检查字符串是否包含某个子字符串。使用switch语句检查字符串中的子字符串

谢谢。

+2

不,你必须与正常不过的事情吧'if'语句。 –

+0

也许你会发现'String.contains()'方法更容易使用? –

+0

这将是一个矛盾的事实,即'switch'必须选择一个'case'语句而没有歧义。 *匹配*一个字符串的字符串不能匹配不同的大小写,但是包含*一个子字符串的字符串可以包含另一个没有问题的子字符串... – Holger

回答

3

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

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

0

你的意思是这样的吗?

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

还是你想的ConstantExpression成为boolean?这是行不通的,因为你打开String

0

如果您不怕潜入一些Java 8 lambda并与javaslang结合使用,那么就存在一个干净的解决方案。 (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 docs 寻找

3.6.1。匹配的为Java

干杯, 基础知识斯蒂芬

相关问题