2011-02-17 10 views
16

İki Dizeyi içeren her satırda satır satır okuyabilmemin en hızlı yolu nedir? bir örnek girdi dosyası olacaktır:Bir dosya satırını her satırdaki 2 takım Dizeyle hizalamanın en hızlı yolu?

Fastest, Way 
To, Read 
One, File 
Line, By Line 
.... can be a large file 

dize arasındaki boşluklar örneğin varsa bile gerek her satırda dizeleri iki grup her zaman vardır

"Hattı By" Şu anda

FileReader a = new FileReader(file); 
      BufferedReader br = new BufferedReader(a); 
      String line; 
      line = br.readLine(); 

      long b = System.currentTimeMillis(); 
      while(line != null){ 

kullanıyorum yeterli olduğunu verimli mi ya da orada herhangi bir yardım sayesinde takdir (hiçbir dış kütüphaneleri lütfen) standart JAVA API kullanarak daha verimli bir yoldur!

+1

Her türlü tamponlu okuma olasılıkla Dosyayı okuduğunuz sürücünün arama süresinden çok daha hızlı olmalıdır. – biziclop

cevap

38

"Verimli" dediğinizde ne demek istiyorsunuz. Performans açısından bakıldığında sorun yok. Kod tarzı ve büyüklüğü hakkında soruyorsan, ben pesonally neredeyse küçük bir düzeltme yapmak yapın: STDIN Java 6 okuma için

 BufferedReader br = new BufferedReader(new FileReader(file)); 
     String line; 
     while((line = br.readLine()) != null) { 
      // do something with line. 
     } 

bir başka yol size sunar. Kullanım sınıfı Konsol ve dize ayrı iki grup bu şekilde yapabiliriz isterseniz onun yöntemleri

readLine() ve readLine(fmt, Object... args)

1

:

BufferedReader in = new BufferedReader(new FileReader(file)); 
String str; 
while ((str = in.readLine()) != null) { 
    String[] strArr = str.split(","); 
    System.out.println(strArr[0] + " " + strArr[1]); 
} 
in.close(); 
2
import java.util.*; 
import java.io.*; 
public class Netik { 
    /* File text is 
    * this, is 
    * a, test, 
    * of, the 
    * scanner, I 
    * wrote, for 
    * Netik, on 
    * Stack, Overflow 
    */ 
    public static void main(String[] args) throws Exception { 
     Scanner sc = new Scanner(new File("test.txt")); 
     sc.useDelimiter("(\\s|,)"); // this means whitespace or comma 
     while(sc.hasNext()) { 
      String next = sc.next(); 
      if(next.length() > 0) 
       System.out.println(next); 
     } 
    } 
} 

sonucu:

C:\Documents and Settings\glowcoder\My Documents>java Netik 
this 
is 
a 
test 
of 
the 
scanner 
I 
wrote 
for 
Netik 
on 
Stack 
Overflow 

C:\Documents and Settings\glowcoder\My Documents> 
İlgili konular