2013-05-03 112 views
0

我需要讀取一個文本文件中存儲在一行中的數組。 什麼我做的到現在爲止是這樣的:在Java中輸入數組的最有效方法是什麼?

BufferedReader in = /*hook it to the file input stream via an InputStreamReader */ 
String[] input = in.readLine().split(" "); 
for (int i = 0; i < input.length; i++) 
    array[i] = Integer.parseInt(input[i]); 

這裏,使用String數組很不必要的。我怎樣才能消除這個冗餘步驟?

+0

這是一個災難性的性能問題嗎?你想避免使用'String#split'? – Gamb 2013-05-03 20:21:01

+0

讀取磁盤上的文件比分割字符串要慢幾個數量級,實例化一個String數組並將每個元素轉換爲Integer。這樣做你不會獲得任何重要的結果。這就好比使用跑鞋在2000英里的行程之後將你的車10米走到你家。不成熟的優化是萬惡之源。使用乾淨且可維護的代碼,只在必要時進行優化,並在必要時進行優化。 – 2013-05-03 20:33:45

回答

3

如果你可以使用InputStreamScanner類,你可以這樣做:

Scanner scanner = new Scanner(inputStream); 
List<Integer> list = new ArrayList<Integer>(); 
while(scanner.hasNext()) { 
    list.add(scanner.nextInt()); 
} 
0
BufferedReader in = /*hook it to the file input stream via an InputStreamReader */ 
String input = in.readLine(); 
StringBuilder sb = new StringBuilder(); 
List<Integer> list = new LinkedList<>(); //yours array equivalent 
for (int i = 0; i < input.length; i++) { 
    char ch = input.charAt(i); 
    if (ch == ' ') { 
     list.add(Integer.parseInt(sb.toString())); 
     sb.clear(); 
    } else { 
     sb.append(ch); 
    } 
} 

這樣你就不需要創建冗餘陣列。我認爲它與split()方法非常相似,但它不需要處理正則表達式,所以在這種情況下性能應該會更好。

+0

爲了改進,您可以存儲前一個字符(或初始值爲0)的(int)索引,而不是保留StringBuilder和Integer.parseInt(input.substring(previous,i))。 – 2013-05-03 20:27:32

相關問題