0

このコードは機能しますが、try/catch box.

public enum AccentuationUTF8 {/** */
        é, /** */è, /** */ç, /** */à, /** */ù, /** */
        ä, /** */ë, /** */ö, /** */ï, /** */ü, /** */
        â, /** */ê, /** */î, /** */ô, /** */û, /** */
}
......

    final EnumSet<AccentuationUTF8> esUtf8 = EnumSet.noneOf(AccentuationUTF8.class);
    final String[] acc1 = {"é", "à", "u"};
    for (final String string : acc1) {
        try { // The ontologic problem
            esUtf8.add(AccentuationUTF8.valueOf(string));
        } catch (final Exception e) {
            System.out.println(string + " not an accent.");
        }
    }
    System.out.println(esUtf8.size() + "\t" + esUtf8.toString()

出力:

u   not an accent.
2   [é, à]

単語または文のすべてのアクセントを含む EnumSet を生成したいと考えています。

コメントの後に編集

  • EnumSetを使用せずにそのようなを管理することは可能ですかtry( AccentuationUTF8.valueOf(string)?
  • コーディングするより良い方法はありますか?

最終編集

あなたの応答は私に良い解決策を示唆しています:なぜならEnumSet.contains(Object)、それを変更する:例外なしでaを返すことができるthrow an Exception一時的なものを作成するからです。 したがって、醜いものは削除され、コードは次のようになります。HashSetnull

try/catch

final Set<String> setTmp = new HashSet<>(AccentsUTF8.values().length);
for (final AccentsUTF8 object : AccentsUTF8.values()) {
    setTmp.add(object.toString());
}
final EnumSet<AccentsUTF8> esUtf8 = EnumSet.noneOf(AccentsUTF8.class);
final String[] acc1 = {"é", "à", "u"};
for (final String string : acc1) {
    if (setTmp.contains(string)) {
        esUtf8.add(AccentsUTF8.valueOf(string));
    } else {
        System.out.println(string + " not an accent.");
    }
}
System.out.println(esUtf8.size() + "\t" + esUtf8.toString() 

お気遣いありがとうございます。

4

1 に答える 1

2

ここでは、列挙型が最善のアプローチだとは思いません。これは、有効な Java 識別子に対してのみ機能するためです。

あなたが本当に欲しいのは、次のようなものだけのSet<Character>ようです:

Set<Character> accentsInText = new HashSet<Character>();
for (int i = 0; i < text.length(); i++) {
    Character c = text.charAt(i);
    if (ALL_ACCENTS.contains(c)) {
        accentsInText.add(c);
    }
}
于 2012-08-07T10:08:00.773 に答える