Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.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中如何从if语句中排除条件_Java_Netbeans 7 - Fatal编程技术网

Java中如何从if语句中排除条件

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

我正在尝试使用用户输入(字符串'question')搜索文本文件的多行,但我需要排除一些常见术语,因为它们会带来错误的结果和正确的结果

 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);
    }
}