2010-09-27 17 views

cevap

46

Oku dosya daha sonra boşluklarla ayrılmış ise

System.out.println (strLine); 

yerine Sen,

try{ 
int i = Integer.parseInt(strLine); 
}catch(NumberFormatException npe){ 
//do something 
} 

olabilir bir tamsayı, her satırı ayrıştırmak ve bir liste halinde saklamak:

List<Integer> list = new ArrayList<Integer>(); 
File file = new File("file.txt"); 
BufferedReader reader = null; 

try { 
    reader = new BufferedReader(new FileReader(file)); 
    String text = null; 

    while ((text = reader.readLine()) != null) { 
     list.add(Integer.parseInt(text)); 
    } 
} catch (FileNotFoundException e) { 
    e.printStackTrace(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} finally { 
    try { 
     if (reader != null) { 
      reader.close(); 
     } 
    } catch (IOException e) { 
    } 
} 

//print out the list 
System.out.println(list); 
+0

Bu iyi, ama ben Integer.valueOf (String kullanırım Bunun yerine bir nesne (Tamsayı) istediğinizden beri. –

+0

Neden ** reader.close(); ** 'yi while döngüsünden hemen sonra satırlara taşıyamıyoruz ve ** ** ** bloğu ve diğer ** try-catch'lardan kaçınıyoruz ** ** içerir? –

+2

@ m-d [Java Eğitimi] 'ne bakın (http://docs.oracle.com/javase/tutorial/essential/exceptions/finally.html). “Try” bloğunda bir istisna olsa bile, her zaman kapalı olduklarından emin olmak için kaynakları “nihayetinde” kapatmalısınız. Bu, kaynak sızıntılarını önler. – dogbane

3
try{ 

    BufferedReader br = new BufferedReader(new FileReader("textfile.txt")); 
    String strLine; 
    //Read File Line By Line 
    while ((strLine = br.readLine()) != null) { 
     // Print the content on the console 
     System.out.println (strLine); 
    } 
    //Close the input stream 
    in.close(); 
    }catch (Exception e){//Catch exception if any 
     System.err.println("Error: " + e.getMessage()); 
    }finally{ 
    in.close(); 
    } 

Bu satır satır okuyacak,

senin Hayır ise. newline char tarafından saperated. o zaman

try{ 
    String noInStringArr[] = strLine.split(" "); 
//then you can parse it to Int as above 
    }catch(NumberFormatException npe){ 
    //do something 
    } 
+0

bir 'finally' bloğunda InputStream kapatmalıdır. – dogbane

+0

Lütfen metni okumak için DataInputStream kullanmayın. Ne yazık ki bu gibi örnekler tekrar tekrar kopyalanır, böylece örneğinizden kaldırabilirsiniz. http://vanillajava.blogspot.co.uk/2012/08/java-memes-which-refuse-to-die.html –

+1

güncelleştirildi, güzel yazı btw –

9

A much s Hörter alternatif aşağıdaki gibidir:

Path filePath = Paths.get("file.txt"); 
Scanner scanner = new Scanner(filePath); 
List<Integer> integers = new ArrayList<>(); 
while (scanner.hasNext()) { 
    if (scanner.hasNextInt()) { 
     integers.add(scanner.nextInt()); 
    } else { 
     scanner.next(); 
    } 
} 

A Scanner varsayılan olarak boşluk eşleşen bir sınırlayıcı motif kullanılarak jeton içine girişini keser. Varsayılan sınırlayıcı beyaz boşluk olsa da, yeni satır karakteriyle ayrılmış tüm tam sayıları başarıyla buldu. biz bir satırda bunu yapabilir Java 8'de

3

İyi haber:

List<Integer> ints = Files.lines(Paths.get(fileName)) 
          .map(Integer::parseInt) 
          .collect(Collectors.toList()); 
1
File file = new File("file.txt"); 
Scanner scanner = new Scanner(file); 
List<Integer> integers = new ArrayList<>(); 
while (scanner.hasNext()) { 
    if (scanner.hasNextInt()) { 
     integers.add(scanner.nextInt()); 
    } 
    else { 
     scanner.next(); 
    } 
} 
System.out.println(integers); 
+0

Cevabınızı beğendim! Yalnızca tamsayıları basma ve boşlukları, yeni satırları ve diğer tamsayı olmayan karakterleri atlatma şekli – Hazmat

İlgili konular