当我尝试打印时,为什么新行会附加到我的数组元素?

时间:2012-06-15 11:23:58

标签: java arrays string newline

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

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

4 个答案:

答案 0 :(得分:2)

如果您无法控制输入,则可以在使用输入之前执行trim()。这消除了任何\n和空格。

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

您可以通过编写实用程序方法来使其更清晰。

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

并将其用作:

match[m] = sanitize(match[m]);
keyword = sanitize(keyword);

答案 1 :(得分:1)

我能看到的唯一原因是match[0]已经在换行符中结束了。您应该在添加match[0]之前输出"1"进行检查。一个好的做法是以这种形式输出:

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

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

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

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

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

答案 2 :(得分: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;
    }

答案 3 :(得分: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)