2012-06-15 32 views
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 

爲什麼在匹配[M]的情況下,有 「sparktg」 & 「1」 之間的新線?

+9

你有'sparktg \ N'內'比賽[0]''附加1' –

+0

我只是測試你的代碼之前,它似乎罰款。你能告訴我們你是如何使用它的嗎? – Pshemo

+0

同樣在你的if match [m] .equals(null)中,你只會檢查索引'm'上的數組'match'是否存儲字符串「null」。如果'match [m]'沒有設置值'(null)',你會看到'java.lang.NullPointerException',因爲它會嘗試執行'null.equals(null)'。如果這不是你的意圖,請使用'match [m] == null'而不是你的情況,而不是'match [m]!= null'。 – Pshemo

回答

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

我可以看到的唯一原因是,在match[0]換行已經結束。在添加"1"之前,您應該通過輸出match[0]進行檢查。一個好的做法是輸出形式如下:

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

...因此利用|清楚地標示出您的字符串的開始和結束。

您可以使用trim()切斷任何空格,換行,包括:

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

然而,這也將刪除空格和製表符,這可能是也可能不是你的問題。當我比較字符串時,我經常首先修剪兩個字符串,只是爲了安全起見,但僅限於無視空格。

+0

如果您只想刪除換行符,請查看'String.replaceAll()'或'String.replaceFirst()',這將允許您通過正則表達式控制替換。 – kfb

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; 
    } 
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) 
相關問題