2016-03-31 10 views
-1

Ich schreibe einen Code, wo ich aktuelle Zeile und nächste Zeile lesen muss. Wenn die nächste Zeile eine Zeichenfolge enthält, muss ich die aktuelle Zeile löschen.nicht zu verstehen, wie das Ende der Datei zu finden

Aber wenn ich es mache, sobald es das EOF erreicht, zeigt es mir null Zeiger Ausnahme.

Unten ist mein Code.

private static void cleanUpTempFile(File temp) throws IOException { 
     FileReader fr = new FileReader(temp); 
     BufferedReader temp_in = new BufferedReader(fr); 
     String tempStr, tempStr1 = null; 
     int i = 0; 
     for (String next, footnotes = temp_in.readLine(); footnotes != null; footnotes = next) { 
      next = temp_in.readLine(); 
      try { 
       if (next.contains("pb") && (next != null)) { 
        tempStr = footnotes; 
        tempStr1 = tempStr; 
        tempStr = tempStr1.replace(tempStr1, ""); 
        footnotes = tempStr; 

       } 
      } catch (Exception e) { 
       System.out.println(e); 
      } 
      System.out.println(footnotes); 
     } 

     temp_in.close(); 

    } 

Es ist mir Fehler zu werfen, da, wenn es da kommt, wenn es um Ende geht, wird aktuelle Zeile letzte Zeile und next Punkte zur nächsten Zeile zeigt, der null ist. Wie kann ich das sortieren?

Auch wenn es eine Ersetzung gibt, und leere Zeile erstellt wird, gibt es eine Möglichkeit, dass ich aufhören kann, eine neue Zeile zu erstellen.

versuchte ich in meinem if

tempStr1 = tempStr; 
footnotes = tempStr1.replace("\\s", ""); 

den folgenden Code hinzufügen Aber das funktioniert nicht scheint.

Mit dem untenstehenden Code versucht und meine Konsole druckt null.

private static void cleanUpTempFile(File temp) throws IOException { 
     FileReader fr = new FileReader(temp); 
     BufferedReader temp_in = new BufferedReader(fr); 
     String tempStr, tempStr1 = null; 
     String footnotes; 
     while ((footnotes = temp_in.readLine()) != null) { 
      String next; 
      while ((next = temp_in.readLine()) != null) { 
       if (next.contains("pb")) { 
        tempStr = footnotes; 
        tempStr1 = tempStr; 
        tempStr = tempStr1.replace(tempStr1, ""); 
        footnotes = tempStr; 

       } 

      } 

     } 
     System.out.println(footnotes); 
     temp_in.close(); 
    } 

Danke.

+0

Änderung next.contains ("Pb") && (nächste! = Null) zu && next.contains (nächsten! = Null) ("pb") –

+0

Hallo @MohdAlomar, das funktioniert so wie erwartet. Aber ich habe ein paar Zweifel, die Veränderung der Paratheseinhalte macht einen Unterschied? – Rakesh

+0

@Rakesh: Es ändert sich die * Reihenfolge *, die hier wichtig ist, da '&&' kurzgeschlossen ist. Der Wert "next! = Null" muss nicht in Klammern gesetzt werden. –

Antwort

0

Neben der Überprüfung, ob die Datei vorhanden ist und an sie angehängt wird, sollten Sie auch eine .hasNextLine() - Bedingung haben.

+0

Er verwendet 'FileReader' und' BufferedReader', es gibt keine 'hasNextLine' zum Aufruf. – Tom

4

Wie Baldurian vorgeschlagen können Sie dies überprüfen, indem Scanner#hasNextLine() mit:

Scanner input = new Scanner(new File(filename)); 
String prevLine = input.nextLine(); 
while(input.hasNextLine()) 
{ 
    String nextLine = input.nextLine(); 
    //do some stuff 
    prevLine = nextLine; 
} 
+0

Ich weiß nicht, was Sie versucht haben, mit '" \ "" + Dateiname + "\" "zu erreichen, aber da dies höchstwahrscheinlich falsch ist, habe ich es entfernt. Es ist auch immer eine gute Idee, einen Link zu den verwendeten Methoden hinzuzufügen, damit andere leicht überprüfen können, was diese Methode macht. Ich habe das für dich getan. – Tom

+0

Danke Tom für deine Vorschläge. Ich bin neu darin, Antworten zu geben, also muss ich noch viel lernen, um richtige Antworten zu geben! :) –

Verwandte Themen