2011-06-17 12 views
2

Stringの配列を解析し、そのファイル内の各単語に数値を割り当てるインタープリタを作成しています。Java enumと一致しない処理文字列

私が達成したい何、これは次のとおりです。

単語が列挙型で見つからない場合、配列の特定の要素のための外部メソッドparse()を呼び出します。

私のコードは、次のようになります。残念ながら

private enum Codes {keyword0, keyword1}; 

switch Codes.valueOf(stringArray[0]) 
{ 

case keyword0: 
{ 
    value = 0; 
    break; 
} 
case keyword1: 
{ 
    value = 1; 
    break; 
} 
default: 
{ 
    value = parse(StringArray[0]); 
    break; 
} 
} 

、これは入力に等しくない「keyword0」または「KEYWORD1」をし、何かを見つけたとき、私が取得

ない列挙型のconstクラス

ありがとうございます!

答えて

11

対応する列挙型の値がない場合、常にIllegalArgumentExceptionがスローされます。ちょうどこれをキャッチし、あなたは良いです。

try { 
    switch(Codes.valueOf(stringArray[0])) { 
     case keyword0: 
      value = 0; 
      break; 
     case keyword1: 
      value = 1; 
      break; 
    } 
} 
catch(IllegalArgumentException e) { 
    value = parse(stringArray[0]); 
} 
+0

完璧に作業しました、ありがとうございます! – Vic

3

問題は、入力が可能な列挙値でない場合valueOfIllegalArgumentExceptionをスローすることです。あなたはあまりにもANTLRのような本格的なパーサに見たいと思うかもしれ解析するヘビーデューティーをやっている場合は、この近づくかもしれない一つの方法は...

Codes codes = null; 
try { 
    Codes codes = Codes.valueOf(stringArray[0]); 
} catch (IllegalArgumentException ex) { 

} 

if(codes == null) { 
    value = parse(StringArray[0]); 
} else { 
    switch(codes) { 
     ... 
    } 
} 

です。

+0

リンクをありがとう、私はANTLRをチェックします - 有望そう! – Vic

関連する問題