2013-02-13 33 views
1

我很困惑爲什麼下面的方法來測試集成員身份不在我的程序中工作。如果我以任何文本文件作爲參數運行以下程序,在輸出中我只能看到「Second」。我認爲如果陳述應該測試同樣的事情。在Java中測試集成員身份

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.Arrays; 



public class Exc0 { 

    public static void main(String args[]){ 
     try { 
      File input = new File(args[0]); 
      BufferedReader reader = new BufferedReader(new FileReader(input)); 
      int[] delimiters = {' ', '(', ',', ')'}; 

      int current; 
      while ((current = reader.read()) != -1){ 
       if ((Arrays.asList(delimiters).contains(current))){ 
        System.out.println("First"); 
       } 
       if (current == ' ' || current == '(' || current == ',' || current == ')'){ 
        System.out.println("Second"); 
       } 
      } 


     } 
     catch (IOException e){ 
      e.printStackTrace(); 
     } 
    } 

} 

回答

3

這是因爲,當你調用Arrays.asList(delimiters)你得到一個列表中有一個int[]的實例,而不是int/Integer的四個實例。

一般來說,用於檢查字符集的成員,你可能是一個更好的String

String delimiters = "() ,"; 
if (delimiters.indexOf(current) >= 0) { 
    System.out.println("First"); 
} 
+0

這很有效。謝謝! – 2013-02-13 00:56:46

1

(根據對方的回答更正)

由於沒有List<int>Arrays.asList(int[] something)不能回到你希望什麼。雖然起初我想,但它會返回一個List<Integer>,事實並非如此。正如dasblinkenlight指出的那樣,它實際上會返回一個List<int[]>而不是一個元素。 (因此,聲明current作爲Integer而不是int不會修復這個bug,但在宣佈爲Integer[]可能會由馬克·鮑姆巴赫的意見的建議。)

+0

感謝您的回答。我試圖根據你的建議來做這件事。它沒有改變輸出 – 2013-02-13 00:48:28

+0

'Arrays.asList'在傳入'int []'時返回'List '。該修復可能需要您將原始分隔符聲明爲「Integer []」。 (Integer.valueOf(''),Integer.valueOf('('),Integer.valueOf(','),Integer.valueOf(')')};' – 2013-02-13 00:50:58

+0

是的。 ..正確...這就是你沒有真正嘗試代碼而得到的回答...... dasblinkenlight在上面發佈了正確答案...... – 2013-02-13 00:53:41