我有一个标记化的数组
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
}
}
}
答案 0 :(得分:1)
您有理由使用Enum
吗?
因为我的猜测是根据您的问题陈述判断没有。所以(也猜测)searchText
是String
你分裂然后你不应该split
与" "
一起使用,而是将你的初始String
与你想要的分隔符分开:
String[] keywords = searchText.split("AND");
你会得到你期望的数组。
另一方面,如果您需要同时使用所有分隔符,请在split
内使用带有多个分隔符的正则表达式:
String[] keywords = searchText.split("(AND)|(OR)");
答案 1 :(得分:0)
试试这个:
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];
}
}
答案 2 :(得分:0)
您可以使用valueOf()
尝试将String
值视为Enum
成员:
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);
}
这将创建一个包含ArrayList
和String
个OperatorType
的对象,稍后您可以使用instanceOf
识别这些对象。
答案 3 :(得分:0)
以下是使用regex:
可以执行的操作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]
然而如果原始数组是通过拆分来自用户的输入创建的,那么这是极端向后并直接使用原始输入而不是创建joined
变量。
此外,如果在常规文本之间插入关键字,这将正常工作。您可以手动创建keyRegex
,也可以通过枚举名称创建StringBuilder。