我正在编写这个程序,我需要从文本文件中读取信息,然后将读取的信息与用户输入进行比较,并输出一条消息,说明它是否匹配。
目前有这个。该程序成功读取指定的数据,但我似乎无法在最后正确比较字符串并打印结果。
代码低于任何帮助将不胜感激。
import java.util.Scanner; // Required for the scanner
import java.io.File; // Needed for File and IOException
import java.io.FileNotFoundException; //Required for exception throw
// add more imports as needed
/**
* A starter to the country data problem.
*
* @author phi
* @version starter
*/
public class Capitals
{
public static void main(String[] args) throws FileNotFoundException // Throws Clause Added
{
// ask the user for the search string
Scanner keyboard = new Scanner(System.in);
System.out.print("Please enter part of the country name: ");
String searchString = keyboard.next().toLowerCase();
// open the data file
File file = new File("CountryData.csv");
// create a scanner from the file
Scanner inputFile = new Scanner (file);
// set up the scanner to use "," as the delimiter
inputFile.useDelimiter("[\\r,]");
// While there is another line to read.
while(inputFile.hasNext())
{
// read the 3 parts of the line
String country = inputFile.next(); //Read country
String capital = inputFile.next(); //Read capital
String population = inputFile.next(); //Read Population
//Check if user input is a match and if true print out info.
if(searchString.equals(country))
{
System.out.println("Yay!");
}
else
{
System.out.println("Fail!");
}
}
// be polite and close the file
inputFile.close();
}
}
答案 0 :(得分:1)
您应该尝试从用户界面(可见窗口)中的textField读取输入,用户放置该国家/地区并将其作为原始输入缩短代码。(仅当您在屏幕上有可见窗口时)
我对扫描仪没有那么好的经验,因为当我使用扫描仪时,它们会使我的应用程序崩溃。但我的相同测试代码只包含一个文件扫描程序,它不会使我的应用程序崩溃,如下所示:
Scanner inputFile = new Scanner(new File(file));
inputFile.useDelimiter("[\\r,]");
while (inputFile.hasNext()) {
String unknown = inputFile.next();
if (search.equals(unknown)) {
System.out.println("Yay!");
}
}
inputFile.close();
我认为将字符串与文件进行比较的最简单方法是添加一个可见窗口,用户可以在其中键入国家/地区,并使用String str = textField.getText();
答案 1 :(得分:0)
我猜你的比较因为区分大小写而失败。
你的字符串比较不应该是CASE-INSENSITIVE吗?
答案 2 :(得分:0)
这里有一些可能的问题。首先,您要将searchString
转换为小写。 CSV中的数据是否也是小写的?如果没有,请尝试使用equalsIgnoreCase
。此外,在我看来,你应该能够匹配国家名称的部分。在这种情况下,equals
(或equalsIgnoreCase
)仅在用户输入完整的国家/地区名称时才有效。如果您希望只能匹配某个部分,请改用contains
。