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]