2016-12-20 2 views
0

Um ein vom Benutzer eingegebenes Land zu validieren, versuche ich, diese Ländereingabe mit einer Liste von Ländern zu vergleichen, die in einer Textdatei gespeichert sind. Wenn die Eingabe ein Land in der Textdatei gespeichert einstimmt, würde die validCountry auf ‚true‘ gesetzt werden und das Programm würde proceed.This die Lage sein, ist das, was ich bisher habe:Eingabe einer bestimmten Zeile in einer Textdatei vergleichen JAVA

Scanner sc = new Scanner (System.in); 
    String country = ""; 
    boolean validCountry = false; 

    while (!validCountry) 
    { 
     System.out.print("Country: "); 
     String countryIn = sc.next(); 
     try{ 
      Scanner scan = new Scanner(new File("countries.txt")); 
      while (scan.hasNext()) { 
       String line = scan.nextLine().toString(); 
       if(line.contains(countryIn)) 
       { 
        country = line; 
        validCountry = true; 

       } 
      } 
     }catch(Exception e) 
     { 
      System.out.print(e); 
     } 
    }  

Die oben einfach Schleifen für mich, das Land neu einzugeben (impliziert, dass es ungültig ist).

Dies ist, was die countries.txt Datei sieht aus wie (natürlich alle Länder der Welt enthält nicht nur die ersten paar beginnend mit ‚A‘:

Afghanistan 
Albania 
Algeria 
American Samoa 
Andorra 
Angola 
Anguilla 
... 

Ich bin sicher, es ist eine sehr einfache und kleinerer Fehler, den ich nicht zu finden scheint, aber ich habe versucht, es für eine Weile zu entdecken, aber ohne Erfolg.Ich habe mehrere andere stackoverflow Antworten überprüft, aber sie schienen auch nicht zu arbeiten Form der Hilfe :)

Bitte lassen Sie mich wissen, wenn meine Frage weitere Erläuterungen benötigt.

+0

Welche Art von Fehler erhalten Sie? ist die Textdatei korrekt geladen? – user7291698

+0

Ich bekomme keinen spezifischen Fehler, es läuft einfach zurück, um ein Land einzugeben. Ich nehme an, die Textdatei ist korrekt geladen - sonst würde die Konsole mir eine 'Datei nicht gefunden' Fehler geben; was tut es nicht..so nehme ich an es ist richtig geladen? –

+0

Ja, wenn Sie dort keinen Fehler bekommen, dann ist es wahrscheinlich richtig geladen. Vielleicht überprüfen Sie aber, ob scan.hasNext() jemals true zurückgibt (durch Debuggen oder durch eine System.out.println() – user7291698

Antwort

0

Problem gelöst, die countries.txt Datei hatte ich besser wäre, wurde codiert in UNICODE. Ich musste es nur in ANSI ändern.

1

Angenommen, dass in String countinIn = sc.next(); die sc ist ein Scanner, der System.in verwenden, ändern Sie die .next() in nextline():

String countryIn = sc.nextLine(); 

dann auch if (line.contains ändern sollte (countryIn)), weil es wahr zurück, auch wenn die gegebene Linie ist ein Teil eines Landes ( afg wird in afghanistan obwohl afg zu finden ist nicht in der Länderliste. verwenden equalsIgnoreCase statt:

if (line.equalsIgnoreCase(countryIn)) { 
... 
} 

Versuchen Sie, wenn diese Klasse funktioniert:

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

public class Country { 

    public static void main(String[] args) { 
     Scanner sc = new Scanner (System.in); 
     String country = ""; 
     boolean validCountry = false; 

     while (!validCountry) 
     { 
      System.out.print("Country: "); 
      String countryIn = sc.nextLine(); 
      try{ 
       Scanner scan = new Scanner(new File("countries.txt")); 
       while (scan.hasNext()) { 
        String line = scan.nextLine(); 
        if(line.equalsIgnoreCase(countryIn)) 
        { 
         country = line; 
         validCountry = true; 
         break; 
        } 
       } 
      }catch(Exception e) 
      { 
       e.printStackTrace(); 
      } 
     } 
    } 
} 
+0

gute Bemerkung über die Verwendung von subString! – user7291698

+0

Ja, der sc ist ein Scanner, der System.in verwendet. I habe die .next() in .nextLine() geändert und die .contains in .equalsIgnoreCase() ...aber es funktioniert immer noch nicht! Das System.out.print ("Land:"); re-loops, damit ich ein Land eingeben kann - egal, ob ich vollständigen Müll oder ein tatsächliches Land aus der Textdatei eingib –

+0

Korrigiere die countries.txt, die du im Beispiel angegeben hast: County-Namen enthalten zusätzliche Leerzeichen am Ende der Zeile. Versuchen Sie, sie aus der Datei zu entfernen –

1

ich den Code getestet und es funktioniert für mich. ich Ihre Variable sc wie folgt initialisiert:

Scanner sc = new Scanner(System.in); 

Beachten Sie, dass es die Datei außerhalb der while-Schleife zu laden (für bessere Leistung)

+0

Ich habe keine Fehler der Kompilierung oder außerhalb der Grenzen von Fehlern oder irgendetwas dieser Art ... das Programm scheint einfach für mich zurück, um ein Land einzugeben! Wie hat es für dich funktioniert ?! Was gibt es zurück? –

+0

Ich habe eine "System.out.println (" ok: "+ Land) hinzugefügt;" Am Ende deines Codes und wenn ich "Angola" getippt habe, schrieb es mir "ok: Angola". – user7291698

Verwandte Themen