0
private int Index(String[] match,String keyword){
   int m=0;
   keyword=keyword+"1";
   match[m]=match[m]+"1";
   System.out.println("match:"+match[m]);
   System.out.println("keyword:"+keyword);
   System.out.println(match[m].equals(keyword));
   while(!(match[m].equals("")) && !(match[m].equals(null))){
           System.out.println("yes");
       if(match[m].equals(keyword)){
         break;
       }
       else
           m++;
   }
   return m;
}

我得到以下输出(关键字的值是 sparktg):

match:sparktg
1
keyword:sparktg1
false

为什么在 match[m] 的情况下,“sparktg”和“1”之间有一个新行?

4

4 回答 4

2

If you have no control over the input, you can do a trim() before you use the inputs. This eliminates any \n and spaces.

if(match[m] != null) {
   System.out.println("match:"+match[m].trim());
}
if(keyword != null) {
   System.out.println("keyword:"+keyword.trim());
}

You can make it cleaner by writing a utility method to do this.

public String sanitize(String input) {
    return input != null ? input.trim() : null;
}

and use it as so:

match[m] = sanitize(match[m]);
keyword = sanitize(keyword);
于 2012-06-15T11:32:43.997 回答
1

我能看到的唯一原因是它match[0]已经以换行符结尾。您应该match[0]在添加"1". 一个好的做法是以这种形式输出:

System.out.println("|"+match[0]+"|");

...因此使用|来清楚地标记您的字符串的开始和结束位置。

您可以trim()用来切断任何空格,包括换行符:

match[m] = match[m].trim() + "1";

但是,这也会删除空格和制表符,这对您来说可能是也可能不是问题。当我比较字符串时,为了安全起见,我经常先修剪两个字符串,但前提是你忽略了空格。

于 2012-06-15T11:34:08.973 回答
0

这不是答案,而是关于代码的符号

match[m].equals(null)会抛出一个NullPointerException. 检查是否match[m]不等于 null 的正确方法是:mathc[m] != null在调用对象的任何方法之前。所以使用这个:

match[m] != null && !match[m].equals("")

而不是这个:

!match[m].equals("") && !match[m].equals(null)
于 2012-06-15T12:07:41.813 回答
0

尝试这个。在解析之前替换所有新行。

private static int Index(String[] match,String keyword){
       int m=0;

       for(int k=0;k<match.length;k++){
           if(match[k]!=null)
           match[k]= match[k].replace("\n", "");

       }
       if(keyword!=null)
           keyword= keyword.replace("\n", "");

       keyword=keyword+"1";
       match[m]=match[m]+"1";
       System.out.println("match:"+match[m]);
       System.out.println("keyword:"+keyword);
       System.out.println(match[m].equals(keyword));
       while(!(match[m].equals("")) && !(match[m].equals(null))){
               System.out.println("yes");
           if(match[m].equals(keyword)){
             break;
           }
           else
               m++;
       }
       return m;
    }
于 2012-06-15T11:36:03.873 回答