为了验证用户输入的国家/地区,我尝试将该国家/地区输入与存储在文本文件中的国家/地区列表进行比较。如果输入与存储在文本文件中的国家匹配,则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答案,但它们似乎也没有工作。我非常感谢任何形式的帮助:)
如果我的问题需要进一步澄清,请告诉我。
答案 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。