使用枚举集
问题描述:
此代码有效,但使用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)
,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()
感谢。
答
我不认为枚举是这里最好的方法 - 部分原因是它只能用于有效的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);
}
}
+1为了简单起见,'accents'甚至可以了'String'这可能不是慢得多。 – 2012-08-07 10:11:09
我已经想到了你的答案,但是我想用易于管理的EnumSet(以及由Sun/Oracle表示的速度)来强调查询单词 – 2012-08-07 10:12:27
@ cl-r:你是否真的认为每个非用户都会遇到异常性格会给你速度?您的代码以何种方式比我的“更易于管理”? – 2012-08-07 10:16:17