有没有办法将开关与String.contains("")集成?

use*_*930 9 java switch-statement

我需要检查一个String对象是否包含()各种子串,并根据结果执行不同的代码片段.目前我有一系列的其他如果.如果可能的话我想把它转换成一个开关.有没有办法做到这一点?

目前:

 if (SomeString.contains("someSubString")) {

    . . . do something

 } else if (SomeString.contains("anotherSubString")) {

    . . . do something else

 } else if (SomeString.contains("yetanotherSubString")) {

    . . . do something even more different

 }  
 .
 .
 .
Run Code Online (Sandbox Code Playgroud)

Sil*_*eak 18

当我遇到这样的情况,并且真的不想使用时else if,我会这样做:

String[] cases = {"someSubString", "anotherSubString", "yetanotherSubString"};

int i;
for(i = 0; i < cases.length; i++)
    if(SomeString.contains(cases[i])) break;

switch(i) {
    case 0: //someSubString
        System.out.println("do something");
    break;
    case 1: //anotherSubString
        System.out.println("do something else");
    break;
    case 2: //yetanotherSubString
        System.out.println("do something even more different");
    break;
    default:
        System.out.println("do nothing");
}
Run Code Online (Sandbox Code Playgroud)

当然,这有一些缺点.对于初学者来说,如果你在除了结尾之外的任何地方添加另一个字符串,所有索引都会移动,你必须手动纠正.尽管如此,我认为我已经使用了一两次这样的东西,并认为它使代码更具可读性.据推测,这些指数在程序中具有一定的意义,从而0...someSubString以一种对问题有意义的方式进行耦合.