Suche nach einem Zeichen oder einer Zeichenfolge in einer Datei (Java)

Ich komme :

Ich habe versucht, eine Datei.dat zu lesen, die viele Befehle enthält, die das Zeichen am Anfang jeder Zeile sind. Aber irgendwie scheint der Code, den ich geschrieben habe, einen Teil des Zeichens am Anfang einer Zeile zu überspringen oder nicht zu erkennen.

Dies ist die Datei (Original):

p 10 1 100
p 23 1 50
p 12 2 275
d 1
s 1
p 14 2 1050
d 3
x 4
p 37 2 25
p 41 1 500
d 2
s 2
q

Das ist das Ergebnis:

 got p!
 x, y, z of p command are: 10, 1, 100
 got p!
 x, y, z of p command are: 23, 1, 50
 got p!
 x, y, z of p command are: 12, 2, 275
 command not found
 got p!
 x, y, z of p command are: 14, 2, 1050
 command not found
 got p!
 x, y, z of p command are: 37, 2, 25
 got p!
 x, y, z of p command are: 41, 1, 500
 got s
 x of s command is: 2
 java.util.NoSuchElementException
 Process finished with exit code 0

Die Ergebnisse würden jedoch einen weiteren Fehler verursachen, wenn ich versuchte, die Datei ein wenig zu bearbeiten (tauschen Sie einfach 2 Zeilen aus).

Hier ist die bearbeitete Datei:

d 3
p 10 1 100
p 23 1 50
p 12 2 275
s 1
d 1
p 14 2 1050
x 4
p 37 2 25
p 41 1 500
d 2
s 2
q

Das Ergebnis der bearbeiteten Datei:

command not found
command not found
command not found
got s
x of s command is: 1
command not found
command not found
got p!
x, y, z of p command are: 37, 2, 25
got p!
x, y, z of p command are: 41, 1, 500
got s
x of s command is: 2
java.util.NoSuchElementException
Process finished with exit code 0

Und das ist der Code, den ich geschrieben habe:

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

public class test3 {
    public static void main(String[] args) throws Exception {
        File file = new File("file.dat");
        try {
            Scanner input = new Scanner(file);
            while (input.hasNext()) {
                if ("p".equals(input.next())) {
                    System.out.println("got p!");
                    String x = input.next();
                    String y = input.next();
                    String z = input.next();

                //I put this print and variables x,y,z here for debug but also to implemented it later on
                    System.out.println("x, y, z of p command are: " + x + ", " + y + ", " + z);

                } else if ("d".equals(input.next())) {
                    System.out.println("got d!");
                    String x = input.next();
                    System.out.println("x of d command: " + x);

                } else if ("s".equals(input.next())) { //This is the show status operation from 's' command
                    System.out.println("got s");
                    String x = input.next();
                    System.out.println("x of s command is: " + x);
                } else if ("q".equals(input.next())) {
                    System.out.println("got q");
                } else {
                    System.out.println("command not found");
                }
            }
        } catch (NoSuchElementException e) {
            System.out.print(e);
        }
    }
}

Ich bin dankbar für alle Lösungen, die von Ihnen allen kommen werden

CopyPasterino:

Sie überspringen Teile der Datei, indem Sie aufrufen input.next(). Speichern Sie das Ergebnis von input.next()in einer Variablen und verwenden Sie diese Variable dann in Ihrem if elses. Sobald Sie wissen, mit welchem ​​Befehl Sie es zu tun haben, können Sie so input.next()viele Eingaben aufrufen, wie Sie für den angegebenen Befehl erwarten.

Diese Lösung hat immer noch ein Problem, wenn die Datei nicht richtig formatiert ist. Wenn der Befehl nicht die erwartete Anzahl von Zeichen enthält, wird die Datei falsch analysiert. Sie sollten die Zeilen zu Beginn Ihrer Bedingungen in einer Variablen speichern .nextLine()und die Zeilenvariable von dort aus analysieren, um Ihre Befehle abzurufen und dieses Problem zu vermeiden.

Hier habe ich den Code für den ersten Befehl festgelegt:

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

public class test3 {
    public static void main(String[] args) throws Exception {
        File file = new File("file.dat");
        try {
            Scanner input = new Scanner(file);
            while (input.hasNextLine()) {
                string currentLine = input.nextLine();
                string[] currentLineArray = currentLine.split(" ");
                if ("p".equals(currentLineArray[0])) {
                    System.out.println("got p!");
                    if(currentLineArray.length == 4){
                        String x = currentLineArray[1];
                        String y = currentLineArray[2];
                        String z = currentLineArray[3];
                        System.out.println("x, y, z of p command are: " + x + ", " + y + ", " + z);
                    } else {
                        System.out.println("Incorrect number of arugments for command p!")
                    }
                }
            }
        }
    }
}

Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.

Bei Verstößen wenden Sie sich bitte [email protected] Löschen.

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel

TOP Liste

  1. 1

    So legen Sie mit dem Interface Builder unterschiedliche führende Speicherplätze für unterschiedliche Geräte fest

  2. 2

    Fügen Sie eine weitere Schaltfläche zu gwt Suggest Box hinzu

  3. 3

    Wie konvertiere ich einen Vektor von Bytes (u8) in eine Zeichenfolge?

  4. 4

    Wie kann ich in SCSS mehrere Klassen zu einer einzigen kombinieren?

  5. 5

    Wie konvertiert man einen Datenrahmen im langen Format in eine Liste mit einem geeigneten Format?

  6. 6

    Speichern Sie ein MPAndroidChart-Diagramm in einem Bild, ohne es in einer Aktivität anzuzeigen

  7. 7

    Gruppieren Sie Datenrahmenspalten nach ihrem Datum (die Spaltentitel enthalten) und fassen Sie die Instanzen von Einsen und Nullen in R . zusammen

  8. 8

    Tomcat - Leiten Sie den alten Kontextstamm zum neuen Kontextstamm um

  9. 9

    Eclipse Oxygen - Projekte verschwinden

  10. 10

    Wie wählt man Unterschiede mit drei Tabellen aus?

  11. 11

    Tic Tac Toe-Spiel im React-Reset-Button funktioniert nicht

  12. 12

    So berechnen Sie die Verfügbarkeit von Anwendungen (SLA)

  13. 13

    ElasticSearch BulkShardRequest ist aufgrund von org.elasticsearch.common.util.concurrent.EsThreadPoolExecutor fehlgeschlagen

  14. 14

    Wie kann ich den Kaskadenmodus global einstellen?

  15. 15

    Python: Spalten mit demselben Namen zusammenführen, wobei der Mindestwert beibehalten wird

  16. 16

    So erhalten Sie eine gleichmäßige Höhe für alle Eingabefelder

  17. 17

    Wie erstelle ich einen neuen übergeordneten Knoten außerhalb der .ref (/ path) in der Firebase-Echtzeitdatenbank mithilfe von Cloud-Funktionen (Typescript)?

  18. 18

    Was ist schneller: SUM über NULL oder über 0?

  19. 19

    Wie kann ich eine verschachtelte Schleife mit lapply in R ersetzen?

  20. 20

    Kann ich ein Tkinter-Canvas erstellen, das mehrere Zeilen in einem Text-Widget umfasst?

  21. 21

    Ärgerliches Problem mit yaml, das ich nicht lösen kann

heißlabel

Archiv