【问题标题】:Why is new line getting appended to my array element when I am trying to print this?为什么当我尝试打印时,新行会附加到我的数组元素中?
【发布时间】:2012-06-15 11:23:58
【问题描述】:
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”之间有一个新行?

【问题讨论】:

  • 在附加 1 之前,您在 match[0] 中拥有 sparktg\n
  • 我刚刚测试了你的代码,看起来还不错。你能告诉我们你是如何使用它的吗?
  • 同样在你的 if match[m].equals(null) 中,你只会检查索引 m 上的数组 match 是否存储字符串“null”。如果match[m] 没有设置(null) 的值,您将看到java.lang.NullPointerException,因为它将尝试执行null.equals(null)。如果这不是您的意图,请改用match[m]==null,或者在您的情况下使用match[m]!=null

标签: java arrays string newline


【解决方案1】:

如果您无法控制输入,则可以在使用输入之前执行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);

【讨论】:

    【解决方案2】:

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

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

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

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

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

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

    【讨论】:

    • 如果您只对删除换行感兴趣,请查看String.replaceAll()String.replaceFirst(),这将允许您通过正则表达式控制替换。
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

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

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

      而不是这个:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-01-13
        • 1970-01-01
        • 1970-01-01
        • 2017-06-02
        • 2019-01-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多