Zählen die Anzahl der Zeilen, Worte und Zeichen in einer text-Datei
Ich versuche, nehmen Sie Eingaben von einem Benutzer, und drucken Sie die Menge der Zeilen, Worte und Zeichen in einer text-Datei. Jedoch nur die Anzahl der Wörter richtig ist, druckt er immer 0 für die Zeilen und Zeichen.
import java.util.*;
import java.io.*;
public class TextFileInfoPrinter
{
public static void main(String[]args) throws FileNotFoundException
{
Scanner console = new Scanner(System.in);
System.out.println("File to be read: ");
String inputFile = console.next();
File file = new File(inputFile);
Scanner in = new Scanner(file);
int words = 0;
int lines = 0;
int chars = 0;
while(in.hasNext())
{
in.next();
words++;
}
while(in.hasNextLine())
{
in.nextLine();
lines++;
}
while(in.hasNextByte())
{
in.nextByte();
chars++;
}
System.out.println("Number of lines: " + lines);
System.out.println("Number of words: " + words);
System.out.println("Number of characters: " + chars);
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
versuchen
in.next();
verbraucht alle Zeilen, die in der erstenwhile()
. Nach dem Ende der ersten while-Schleife, gibt es keine weiteren Zeichen gelesen werden, bei der der input-stream.Sollten Sie nest Ihre Zeichen-und Wortzählung innerhalb eine while-Schleife zählen Linien.
Gibt es einige Grund, warum Sie denken, dass:
wird nicht verbrauchen die gesamte input-stream?
Es wird tun, was bedeutet, dass Ihre beiden anderen
while
Schleifen wird nie Durchlaufen. Das ist, warum Ihr Werte für die Worte und Zeilen sind noch auf null gesetzt.Sind Sie wahrscheinlich besser aus der Lektüre der Datei ein Zeichen in einer Zeit, erhöhen die Anzahl der Zeichen jedes mal durch die Schleife, und auch die Erkennung der Zeichen, um zu entscheiden, ob oder nicht zu erhöhen den anderen Zähler.
Grundsätzlich, wo immer Ihr Sie findet eine
\n
ist, erhöhen Sie die Anzahl der Zeilen - sollte man wohl auch tun, wenn das Letzte Zeichen im stream war nicht\n
.Und wenn Sie den übergang von white-space-non-white-space, erhöhen Sie die Anzahl der Wörter (es werden wahrscheinlich einige knifflige edge-Fall, die Verarbeitung in den stream-Anfang, aber das ist ein Umsetzung Problem).
Du suchst so etwas wie der folgende pseudo-code:
Ich denke, die beste Antwort ist
Den Datei-Zeiger an das Ende der Datei, wenn das 1., während Sie ausgeführt wird. versuchen Sie dies:
Ich bin kein Java Experte, aber ich würde davon ausgehen, dass die
.hasNext
,.hasNextLine
und.hasNextByte
alle verwenden und erhöhen Sie die gleiche Datei-position-Anzeige. Sie müssen zurücksetzen, entweder durch erstellen eines neuen Scanners als Aashray erwähnt, oder mit einem RandomAccessFile und ruftfile.seek(0);
nach jeder Schleife.Stimme ich mit @Cthulhu Antwort. In Ihrem code können Sie zurücksetzen Ihres
Scanner
Objekt (in
).Diese setzen Ihr Objekt in an der ersten Zeile der Datei.
Könnten Sie reguläre Ausdrücke verwenden, um zu zählen für Sie.