2016-12-20 1 views
0

Чтобы проверить страну, введенную пользователем, я пытаюсь ввести эту страну по сравнению со списком стран, хранящихся в текстовом файле. Если вход соответствует стране, хранящейся в текстовом файле, то validCountry будет установлено на «истинно», и программа сможет proceed.This это то, что у меня до сих пор:Сравните входные данные с конкретной строкой, сохраненной в текстовом файле. 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); 
     } 
    }  

выше просто петель для меня, чтобы повторно ввести страну (подразумевая, что она недействительна).

Это то, что файл countries.txt выглядит (очевидно, содержит все страны мира не только первые несколько, начиная с «A»:

Afghanistan 
Albania 
Algeria 
American Samoa 
Andorra 
Angola 
Anguilla 
... 

Я уверен, что это очень просто и что я не могу найти, но я пытался обнаружить его некоторое время, но безрезультатно. Я проверил несколько других ответов stackoverflow, но они, похоже, тоже не работали. формы помощи :)

Пожалуйста, дайте мне знать, если мой вопрос нуждается в дальнейшем уточнении.

+0

какая ошибка вы получаете? правильно ли загружен текстовый файл? – user7291698

+0

У меня нет какой-либо конкретной ошибки, она просто заставляет меня вводить страну. Я предполагаю, что текстовый файл правильно загружен - иначе консоль даст мне ошибку «файл не найден»; который он не ... я полагаю, что он правильно загружен? –

+0

Да, если вы не получили ошибку, значит, она, вероятно, правильно загружена. Однако, возможно, вы проверяете, действительно ли scan.hasNext() возвращает true (путем отладки или с помощью System.out.println() – user7291698

ответ

0

Проблема решена, файл countries.txt я был закодированный в UNICODE. Все, что мне нужно было сделать, это изменить его на ANSI.

1

Предполагая, что в Строка countryIn = sc.next(); СБН является сканер, который используют System.in, изменить .next() в nextLine():

String countryIn = sc.nextLine(); 

тогда, вы должны также изменить если (line.contains (countryIn)), потому что он возвращает истину, даже если данная строка подстроку страны ( AFG будет найден в афганистан даже если AFG не в списке стран. использовать equalsIgnoreCase вместо:

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

Попробуйте, если работает этот класс:

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

Хорошее замечание относительно использования subString! – user7291698

+0

Да, sc - это сканер, который использует System.in. I 'изменил .next() на .nextLine() и .contains на .equalsIgnoreCase() ...но он все равно не работает! System.out.print («Страна:»); re-loops для ввода страны - независимо от того, я ввожу полный мусор или фактическую страну из текстового файла –

+0

Исправьте файл country.txt, который вы указали в примере: имена графств содержат дополнительные пробелы в конце строки. Попробуйте удалить их из файла –

1

Я проверил код и он работает для меня. Я инициализируется переменную sc так:

Scanner sc = new Scanner(System.in); 

Обратите внимание, что было бы лучше, чтобы загрузить файл вне цикла While (для лучшей производительности)

+0

У меня нет ошибок в компиляции или из связанных ошибок или чего-то в этом роде ... программа просто, кажется, зациклилась на мне, чтобы ввести страну! Как это сработало для вас ?! Что он возвращает? –

+0

Я добавил «System.out.println (« ok: »+ страна); в конце вашего кода, и если я набрал «Анголу», он написал мне «ОК: Ангола». – user7291698

Смежные вопросы