Java 基于枚举条件创建数组

Java 基于枚举条件创建数组,java,enums,Java,Enums,我有一个标记化的数组 searchTerm = [flu , virus, AND, ebola] 我需要把这本书出版 searchTerm = [flu virus, AND, ebola] 枚举条件可以更改 serarchTerm = ['flu', 'virus', OR, 'ebola'] public enum OperatorType { AND, OR, NOT, IN, ANY, KEYWORD, NONE } 帮助很多人 到目前为止我所尝试的 String[] key

我有一个标记化的数组

searchTerm = [flu , virus, AND, ebola]
我需要把这本书出版

searchTerm = [flu virus, AND, ebola]
枚举条件可以更改

serarchTerm = ['flu', 'virus', OR, 'ebola']

public enum OperatorType
{ 
AND,
OR,
NOT,
IN,
ANY,
KEYWORD,
NONE
}
帮助很多人

到目前为止我所尝试的

String[] keywords = searchText.split(" ");
String[] keywordCondition = null;

    for(int index = 0; index < keywords.length; index++) {
        for(OperatorType opr : OperatorType.values()) {
            if(keywords[index] == opr.toString()) {
                // Some Logic here
                }                   
            }
        }
String[]关键字=searchText.split(“”);
字符串[]关键字条件=null;
for(int index=0;index
试试这个:

        String beforeEnum = "";
        for(int index = 0; index < keywords.length; index++) {*
            bool isEnum = false;
            for(OperatorType opr : OperatorType.values()) {
                if(keywords[index].equals(opr.toString())) {
                    isEnum = true;
                }                   
            }

            if(isEnum){
                if(!beforeEnum.equals("")){
                    newArray.add(beforeEnum);
                }
                newArray.add(keywords[index]);
            }
            else{
                beforeEnum = beforeEnum + " " + keywords[index];
            }

        }
String beforeEnum=”“;
for(int index=0;index
是否有理由使用
Enum

因为从你的问题陈述来看,我猜没有。因此(也是猜测)
searchText
是一个
字符串
如果要拆分,则不应将
split
一起使用,而是使用所需的分隔符拆分初始
字符串

String[] keywords = searchText.split("AND"); 
您将获得预期的阵列

另一方面,如果同时需要所有分隔符,则在
split
中使用带有多个分隔符的正则表达式:

String[] keywords = searchText.split("(AND)|(OR)"); 
您可以使用尝试将
字符串
值作为
枚举
成员获取:

final String[] searchTerms = "flu virus AND ebola".split(" ");
final ArrayList<Object> terms = new ArrayList<Object>();
for (final String term : searchTerms) {
    try {
        terms.add(OperatorType.valueOf(term));
    } catch (IllegalArgumentException e) { // This is not an operator
        if (terms.isEmpty() || !(terms.get(terms.size() - 1) instanceof String)) {
            terms.add(term);
        } else {
            terms.set(terms.size() - 1, terms.get(terms.size() - 1) + " " + term);
        }
    }
}

for (final Object term : terms) {
    System.out.println(term);
}
final String[]searchTerms=“流感病毒和埃博拉”。拆分(“”);
最终ArrayList术语=新ArrayList();
for(最终字符串术语:searchTerms){
试一试{
terms.add(运算符type.valueOf(term));
}catch(IllegalArgumentException e){//这不是运算符
if(terms.isEmpty()| |!(terms.get(terms.size()-1)字符串实例)){
条款。添加(条款);
}否则{
terms.set(terms.size()-1,terms.get(terms.size()-1)+“”+term);
}
}
}
for(最终目标术语:术语){
系统输出打印项次(期限);
}

这将创建一个
数组列表
,其中包含
字符串
运算符类型
对象,您可以在以后使用
实例
来识别这些对象。以下是您可以使用的操作:

但是,如果原始数组是通过从用户分割输入来创建的,那么这是完全向后的,直接使用原始输入,而不是创建
joined
变量


此外,如果在常规文本之间插入关键字,这将正常工作。您可以手动或从枚举名称创建
keyRegex

这一点非常不清楚。你能用更多的话详细说明一下吗?我需要写一个条件来匹配枚举并创建另一个数组。枚举之前的所有数组元素都应该被视为一个元素。你想在什么上输出什么?我已经编辑了我的文章,所以我的结果是searchTerm=[流感病毒,埃博拉病毒]我需要searchTerm=[flu virus,AND,ebola]类型String的方法join(String,String[])未定义(第三行错误)。My bad,id已添加到
1.8
版本中。只需使用
StringBuilder
加入旧的fasion方式即可。
String keyRegex = " (AND|OR|NOT|IN|ANY|KEYWORD|NONE) ";
String[] input = { "flu", "virus", "AND", "ebola" };

String joined = String.join(" ", input); //added in 1.8, use StringBuilder in earlier versions
String replaced = joined.replaceAll(keyRegex, "\n$1\n");
String[] output = replaced.split("\n");

System.out.println(Arrays.toString(output));
// [flu virus, AND, ebola]