将输入与保存在文本文件JAVA中的特定行进行比较

时间:2016-12-20 11:00:33

标签: java validation loops compare text-files

为了验证用户输入的国家/地区,我尝试将该国家/地区输入与存储在文本文件中的国家/地区列表进行比较。如果输入与存储在文本文件中的国家匹配,则validCountry将设置为“true”,程序将能够继续。这是我到目前为止所做的:

    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答案,但它们似乎也没有工作。我非常感谢任何形式的帮助:)

如果我的问题需要进一步澄清,请告诉我。

3 个答案:

答案 0 :(得分:1)

假设在 String countryIn = sc.next(); sc 是使用 System.in 的扫描程序,请更改< i> .next()进入 nextLine()

String countryIn = sc.nextLine();

然后,您还应该更改 if(line.contains(countryIn)),因为即使给定的行是国家/地区的子字符串,它也会返回true( afg 将在 afghanistan 中找到,即使 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();
            }
        }   
    }
}

答案 1 :(得分:1)

我测试了代码,它对我有用。 我将变量sc初始化为:

Scanner sc = new Scanner(System.in);

请注意,最好在while循环外部加载文件(以获得更好的性能)

答案 2 :(得分:0)

问题解决了,我的countries.txt文件是用UNICODE编码的。我所要做的就是将其改为ANSI。