Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用枚举集_Java - Fatal编程技术网

Java 使用枚举集

Java 使用枚举集,java,Java,这段代码可以工作,但有一个try/catch框 public enum AccentuationUTF8 {/** */ é, /** */è, /** */ç, /** */à, /** */ù, /** */ ä, /** */ë, /** */ö, /** */ï, /** */ü, /** */ â, /** */ê, /** */î, /** */ô, /** */û, /** */ } ...... final EnumSet

这段代码可以工作,但有一个
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()
我想生成一个包含单词或句子所有重音的枚举集

评论后编辑

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

您的回答给了我一个很好的解决方案:因为
EnumSet.contains(Object)
抛出异常
,更改它:创建一个临时
哈希集
,能够毫无异常地返回
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() 
final Set setTmp=new HashSet(AccentsUTF8.values().length);
对于(最终AccentsUTF8对象:AccentsUTF8.values()){
setTmp.add(object.toString());
}
final EnumSet esUtf8=EnumSet.noneOf(AccentsUTF8.class);
最后一个字符串[]acc1={“é”,“á”,“u”};
for(最终字符串:acc1){
if(setTmp.contains(字符串)){
esUtf8.add(AccentsUTF8.valueOf(string));
}否则{
System.out.println(字符串+“不是重音”);
}
}
System.out.println(esUtf8.size()+“\t”+esUtf8.toString()

感谢您的关注。

我不认为枚举是最好的方法,部分原因是它只适用于有效的Java标识符

看起来您真正想要的只是一个
集合
,其中包含以下内容:

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);
    }
}
Set accentsInText=new HashSet();
对于(int i=0;i
+1为了简单起见,
重音符号甚至可以是一个
字符串
,可能不会慢很多。我已经考虑过你的答案,但我想使用易于管理的EnumSet(Sun/Oracle称之为speed)对于单词的重音疑问letters@cl-r:你真的认为在每个非重音字符上捕捉一个异常会给你带来速度吗?在什么方面你的代码比我的代码更“易于管理”呢?这只是我的问题:
ALL_ACCENTS.contains(c)
如果它是一个用于验证的枚举,则抛出一个异常,可以修改一个集合,我将避免这种可能性。易于管理的是从OODB以安全(我希望是快速)的方式进行输出查询,而不是格式化输入数据所必需的
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);
    }
}