有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用枚举集

这段代码可以工作,但是使用了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   [é, à]

我想生成一个包含单词或句子所有重音的枚举集

评论后编辑

  • 有没有可能在不使用try(需要AccentuationUTF8.valueOf(string))的情况下管理这样的EnumSet
  • 更好的编码方式是什么

最终编辑

你的回答给了我一个很好的解决方案:因为EnumSet.contains(Object)throw an Exception,改变它:创建一个临时的HashSet能够毫无例外地返回null

因此,丑陋的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() 

谢谢你的关注


共 (0) 个答案