gpt4 book ai didi

java - 使用 EnumSet

转载 作者:行者123 更新时间:2023-12-02 07:38:51 25 4
gpt4 key购买 nike

此代码可以工作,但带有 try/catch 框

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。

评论后编辑

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

最终编辑

您的回复给了我一个很好的解决方案:因为 EnumSet.contains(Object)抛出异常,更改它:创建一个临时 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);
}
}

关于java - 使用 EnumSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11843573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com