Java中如何从if语句中排除条件
我正在尝试使用用户输入(字符串'question')搜索文本文件的多行,但我需要排除一些常见术语,因为它们会带来错误的结果和正确的结果Java中如何从if语句中排除条件,java,netbeans-7,Java,Netbeans 7,我正在尝试使用用户输入(字符串'question')搜索文本文件的多行,但我需要排除一些常见术语,因为它们会带来错误的结果和正确的结果 try { readName file = new readName(file_name); String[] aryLines = file.OpenFile();//OPEN KNOWLEDGE BASE //SEARCH EACH ENTRY IN KNOWLEDGE BASE
try {
readName file = new readName(file_name);
String[] aryLines = file.OpenFile();//OPEN KNOWLEDGE BASE
//SEARCH EACH ENTRY IN KNOWLEDGE BASE
for (int i = 0; i < aryLines.length; i = i + 1) {
String delims = "[ ]+";//SPLIT ITEMS INTO TOKENS
//CREATE ARRAY OF TOKENS
String[] tokens = aryLines[i].split(delims);
//SEARCH THROUGH TOKENS
for (int j = 0; j < tokens.length; j = j + 1){
//MATCH QUESTIONS AGAINST TOKENS AND EXCLUSIONS
if (question.matches("(.*)" + tokens[j] + "(.*)")) {
System.out.println(aryLines[i]);
}
}
}
} catch (Exception e) {
System.out.println(e);
}
但在这种情况下,输入搜索问题时不会产生结果。当搜索问题中省略了中的排除项时,这两个版本都能正常工作
我在这里和其他地方到处搜寻,但到目前为止没有任何东西对我有用。非常感谢任何帮助
这是我知识库的一个样本
Dogs have tails
Donkeys have no humps
如果我搜索
no tails
,它会输出两行,但我想强制它从搜索中排除no
,这样它只返回狗有尾巴
我想这就是你想要的:
//THIS IS AN EXAMPLE KNOWLEDGE BASE
String[] aryLines = {"Dogs have tails","Donkeys have no humps"};
//THIS IS THE QUESTION SUPPLIED BY POSTER
String question = "no tails";
//IT SEEMS THAT POSTER WANTS TO EXCLUDE CERTAIN WORDS FROM THE SEARCH
String exclude = "no";
//REMOVE ALL OCCURRENCES OF THE EXCLUDE STRING IN QUESTION
question = question.replaceAll(exclude, "");
//FOR EACH TOKEN (FROM KNOWLEDGE BASE)
for(String token : aryLines) {
//MATCH QUESTION AGAINST TOKENS
if (token.matches("(.*)" + question + "(.*)")) {
System.out.println(token);
}
}
在本例中,我删除了问题中排除的字符串的所有匹配项。然后我将令牌与正则表达式进行比较:*
由于排除的字符串在比较之前已被删除,它们将不再影响匹配结果,因为代码将比较
狗有尾巴
和驴没有驼峰
到*尾巴。*
您能否提供一个知识库中的示例,一些示例数据。这将有助于理解你的问题。目前,为了测试,它有两条线:狗有尾巴,驴没有驼峰。如果我搜索没有尾巴,它会输出两行,但我想强制它从搜索中排除“no”,这样它只返回“Dogs has tails”。希望这有助于感谢您的整理;)您的代码所做的只是在行上迭代,然后在您创建的标记上迭代,但是您在代码上提供的标记是[]+
,这意味着每个空格。因此,对于第一行,您将有:[0]只狗[1]有[2]条尾巴作为标记,对于第二行,您将有[0]头驴[1]有[2]没有[3]驼峰
当您搜索无尾
时,它将不匹配任何内容,因为它将您的问题与每个标记匹配,而所有标记都不是您的问题。您是否有可能让您的要求更清楚?现在,我似乎不是唯一一个不明白你想做什么的人。狡猾,我喜欢。我要试一试,然后再报告。谢谢是的,非常好,非常感谢。真不敢相信我没想到这一点,有道理!非常感谢@Daemon和Jorge
//THIS IS AN EXAMPLE KNOWLEDGE BASE
String[] aryLines = {"Dogs have tails","Donkeys have no humps"};
//THIS IS THE QUESTION SUPPLIED BY POSTER
String question = "no tails";
//IT SEEMS THAT POSTER WANTS TO EXCLUDE CERTAIN WORDS FROM THE SEARCH
String exclude = "no";
//REMOVE ALL OCCURRENCES OF THE EXCLUDE STRING IN QUESTION
question = question.replaceAll(exclude, "");
//FOR EACH TOKEN (FROM KNOWLEDGE BASE)
for(String token : aryLines) {
//MATCH QUESTION AGAINST TOKENS
if (token.matches("(.*)" + question + "(.*)")) {
System.out.println(token);
}
}