2017-10-19 2 views
0

Ich versuche, einen Scanner, der eine Datei liest und löscht die Leerzeichen zwischen jedem Wort. Ich kann so viel bekommen, aber ich komme nicht dahin, wo sie auf der gleichen Linie bleiben. Ich kann das Programm nicht dazu bringen, eine Zeile zu lesen, die Leerzeichen zu löschen und dann zur nächsten Zeile zu gehen. Dies ist der Text aus meiner Praxis Projekt:Java mit dem Scanner zu lesen und dann Zeile lesen

 
four  score and 

seven    years ago   our 

fathers brought    forth 
    on this   continent 
a   new 

nation 

Ich bin nur noch immer die erste Zeile

und dies ist mein Code:

import java.util.*; 
import java.io.*; 
public class CollapseSpace { 

    public static void main (String[] args) throws FileNotFoundException{ 
     Scanner fileInput = new Scanner(new File ("textwithspaces.txt")); 
     String nextLine = fileInput.nextLine(); 
     Scanner lineInput = new Scanner(nextLine); 
     while(fileInput.hasNext()){ 
      nextLine = fileInput.nextLine(); 
      while(lineInput.hasNext()){ 
       System.out.print(lineInput.next() + " "); // I tried to add a fileInput.NextLine() to consume the line but it isn't working properly    
      } 
      System.out.println(); 
     } 

    } 
} 
+0

ich die Zeile „weiß nextline = fileInput.nextLine() " wird nicht verwendet, aber ich bin mir nicht sicher, wie ich es machen soll, um die Schleife zur nächsten Zeile im Text zu bringen ... es läuft in der ersten Zeile und dann nichts – user8686545

Antwort

-1

Ihr größtes Problem ist, dass Sie nextLine = fileInput.nextLine(); erklärt außerhalb der Schleife, und dann verwendet, dass in Scanner lineInput = new Scanner(nextLine); so wird es die erste Zeile des Textes, aber dann ändert sich nie.

Ich stimme auch mit dem anderen Kommentar, der besagt, dass Sie nicht verwenden sollten *, es gilt als schlechte Praxis, so zu importieren, wie Sie eine ganze Menge Dinge, die Sie nicht verwenden importieren.

Ich habe Ihren Code rekonstruiert, damit er funktioniert.

import java.util.Scanner; 
import java.io.File; 
import java.io.FileNotFoundException; 

public class Main { 

    public static void main (String[] args) throws FileNotFoundException{ 
     Scanner fileInput = new Scanner(new File ("textwithspaces.txt")); 

     while(fileInput.hasNext()){ 
      String nextLine = fileInput.nextLine(); 
      Scanner lineInput = new Scanner(nextLine); 

      while(lineInput.hasNext()){ 
       System.out.print(lineInput.next() + " ");    
      } 
      System.out.println(); 
     } 
    } 
} 
0

Zunächst einmal sollten Sie nicht * werden mithilfe von Klassen importieren. Es wird allgemein als "schlechte Praxis" betrachtet, da es Ihre eigenen Klassen stören kann, auch ist es nicht sehr explizit.

Sie müssen die nextLine-Methode innerhalb Ihrer eigenen Schleife loopen. Und auch eine replaceAll-Methode der Zeichenfolge wäre gut.

Ich habe ein Beispiel unten gezeigt:

import java.util.Scanner; 
import java.io.File; 
import java.io.FileNotFoundException; 

class Main { 
    public static void main(String[] args) throws FileNotFoundException { 

     // Create an object to represent a text file 
     File file = new File("textwithspaces.txt"); 

     // Create a scanner with the text file as argument 
     Scanner scannerWithFile = new Scanner(file); 

     // Continue as long as it has a next line 
     do { 
      // Replace strings 
      String thisLine = scannerWithFile.nextLine(); 

      // Only print the line out if not empty 
      if (!thisLine.isEmpty()) { 
       // Replace all spaces 
       thisLine = thisLine.replaceAll(" ", ""); 

       // Print 
       System.out.println(thisLine); 
      } 
     } while (scannerWithFile.hasNext()); 
    } 
} 

Ich wechselte auch Ihre while-Schleife zu einer Do While-Schleife, das ist so können Sie einfach in die Schleife gehen sofort, ohne vorher einen Zustand zu überprüfen ist, es wird vor der nächsten Iteration gemacht.

1

Wenn Sie nur Zeile für Zeile durchlaufen müssen, und entfernen Sie Leerzeichen zwischen den Wörtern, dann müssen Sie nur eine Schleife, unter Beispielcode

den Trick tun sollten
public static void main (String[] args) throws FileNotFoundException{ 
    final Scanner fileInput = new Scanner(new File ("src/main/resources/textwithspaces.txt")); 
    while(fileInput.hasNext()){ 
     final String nextLine = fileInput.nextLine(); 
     // remove all spaces 
     final String lineWithOutSpaces = nextLine.replaceAll("\\s+",""); 
     System.out.println(lineWithOutSpaces); 
    } 
} 
Verwandte Themen