为了验证用户输入的国家/地区,我试图与存储在文本文件中存储的国家/地区相比,要获得该国家/地区的输入。如果输入与文本文件中存储的一个国家/地区匹配,则验证派将设置为" 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);
}
}
上面的简单循环让我重新输入该国(这意味着它无效)。
这就是centry.txt文件的样子(显然包含世界上所有国家的所有国家,而不仅仅是以'a'的开始:
Afghanistan
Albania
Algeria
American Samoa
Andorra
Angola
Anguilla
...
我敢肯定这是一个非常简单且微小的错误,我似乎找不到。但是我一直试图检测一段时间,但无济于事。我已经检查了其他多个Stackoverflow答案,但它们似乎也没有起作用。我非常感谢任何形式的帮助:)
请让我知道我的问题是否需要进一步澄清。
我测试了代码,对我有用。我像这样初始化了您的变量sc
:
Scanner sc = new Scanner(System.in);
请注意,最好在while循环外加载文件(以获得更好的性能)
假设在 string countryin = sc.next(); sc.next(); sc 是使用 system.in,将 .next()更改为 NextLine():
String countryIn = sc.nextLine();
那么,您也应该更改 if(line.contains(countryin)),因为即使给定的行是一个国家的子弦,它也会返回true( afg )即使 afg 不在国家列表中。
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();
}
}
}
}
解决的问题,我所遇到的contrent.txt文件是在Unicode中编码的。我要做的就是将其更改为ANSI。