switch文としての文字列

可能重複:
   Javaの文字列でステートメントを切り替える

文字列に対してswitch文を使用しようとしていますが、コンパイルエラーです。 switch-caseステートメントでStringを使用する方法を教えてくれる人がいたら、助けになるはずです。

1
文字列は、Javaのswitch文では使用できません。
追加された 著者 mowwwalker,
@Walkerneo Java7以降は真実ではない。提案された修正プログラムもあります:最新バージョンを使用してください。
追加された 著者 Voo,

5 答え

本当に本当にswitch文を使いたいのであれば、方法があります。 switch文のケースを含むenumクラスを作成する

public enum MustUseSwitch{
    value1,
    value2,
    value3;
}

enumを使用してステートメントに切り替えます。

switch(MustUseSwitch.valueOf(stringVariable)){
    case value1:
        System.out.println("Value1!");
        break;
    case value2:
        System.out.println("Value2!");
        break;
    case value3:
        System.out.println("Value3!");
       break;
}
5
追加された
これは明らかにString-> integerのハッシュマップを使用するのと同じですが、きちんとしたトリックです。
追加された 著者 Voo,

すでに述べたように、あなたはできません。技術的な詳細については、の仕様を参照してください。コンパイルスイッチを参照してください。 Java SE 7では、この機能が実装されています。スイッチを使用した例については、このページをご覧ください String にJDK 7を追加します。

多分この質問も参考になるかもしれません。

4
追加された

You can't. Use if/else if/else if/else. Unless you are on Java7. This answer on this duplicate question can explain it far better than I can: https://stackoverflow.com/a/338230/3333

3
追加された

文字列を直接使用することはできませんが、キーストリングの配列を作成し、素早く検索し、インデックスを有効にすることができます。

String[] sortedKeys = new String[] {"alpha", "bravo", "delta", "zebra"};
int keyIndex = Arrays.binarySearch(sortedKeys, switchKey);
switch(keyIndex) {
    case 0://alpha
        break;
    case 1://bravo
        break;
    case 2://delta
        break;
    case 3://zebra
        break;
}
2
追加された

switch 文で String を使用することはできませんが、 Enum 型を使用できます。 列挙型、または public static final int MY_CONSTANT を使用するよりも、列挙型を使用するほうがはるかに優れています。

You'll find a really good tutorial here: Java Enum type tutorial

0
追加された