我正在将用户输入与给定文件输入进行比较:Input file
如果解析的用户输入标记与解析的文件输入标记匹配,则文件输入将作为String返回。
public static String findMatch(Scanner input, String name, String gender){
String output = "";
boolean fileContains = false;
String fileName = "";
String fileGender = "";
System.out.println("User input = " + name + " " + gender);
while (input.hasNextLine() && (fileContains == false)) {
String line = input.nextLine();
Scanner scanLine = new Scanner(line);
if(line.toUpperCase().contains(name.toUpperCase()) && line.contains(gender.toUpperCase())){
fileName = scanLine.next();
fileGender = scanLine.next();
System.out.println("File input = " + fileName + " " + fileGender);
}
if (name.equals(fileName.toUpperCase()) && gender.equals(fileGender.toUpperCase())) {
fileContains = true;
System.out.println("The user input matches the file input.");
output = line;
}
}
//exit out of while loop
System.out.println("fileContains no longer is false.");
System.out.println(output);
return output;
}
有问题的if语句在这里:
if (name.equals(fileName.toUpperCase()) && gender.equals(fileGender.toUpperCase())) {
fileContains = true;
System.out.println("The user input matches the file input.");
output = line;
}
如何获得参数名称和性别:
public static void main(String[] args){
Scanner input = new Scanner(new File("names.txt"));
Scanner console = new Scanner(System.in);
String name = getName(console);
String gender = getGender(console);
String check = find(input, name, gender);
}
public static String getName(Scanner console) {
System.out.print("name? ");
return console.next();
}
public static String getGender(Scanner console) {
System.out.print("gender (M or F)? ");
return console.next();
}
我尝试打印文件输入和用户输入,它们都明显相同。我不确定它为什么不起作用。
用户输入:Jane F
预期输出:
用户输入= Jane F
文件输入= Janette F
文件输入= Janessa F
文件输入= Maryjane F
文件输入= Anjanette F
文件输入= Janeen F
文件输入= Janell F
文件输入= Jane F
用户输入与文件输入匹配。
fileContains不再是假的。
Jane F 98 108 128 116 48 55 47 39 67 202 312 345 436 384
实际输出:
用户输入= Jane F
文件输入= Janette F
文件输入= Janessa F
文件输入= Maryjane F
文件输入= Anjanette F
文件输入= Janeen F
文件输入= Janell F
文件输入= Jane F
文件输入= Janey F
文件输入= Janelle F
文件输入= Janel F
文件输入= Janene F
文件输入=珍妮特F
fileContains不再是假的。
答案 0 :(得分:1)
取代name.equals(fileName.toUpperCase())
,您应该使用name.equals(fileName)
或name.equalsIgnoreCase(fileName)
,具体取决于您的需求。 gender
也是如此。
答案 1 :(得分:0)
问题在于你调用它的方式,或者你传递的参数。您发布的方法效果很好。
这是我刚编译并运行的整个文件:
package jah.tests.stackoverflow;
import java.util.Scanner;
public class FileRead {
public static String findMatch(Scanner input, String name, String gender) {
String output = "";
boolean fileContains = false;
String fileName = "";
String fileGender = "";
System.out.println("User input = " + name + " " + gender);
while (input.hasNextLine() && (fileContains == false)) {
String line = input.nextLine();
Scanner scanLine = new Scanner(line);
if (line.toUpperCase().contains(name.toUpperCase())
&& line.contains(gender.toUpperCase())) {
fileName = scanLine.next();
fileGender = scanLine.next();
System.out.println("File input = " + fileName + " "
+ fileGender);
}
if (name.equals(fileName.toUpperCase())
&& gender.equals(fileGender.toUpperCase())) {
fileContains = true;
System.out.println("The user input matches the file input.");
output = line;
}
}
// exit out of while loop
System.out.println("fileContains no longer is false.");
System.out.println(output);
return output;
}
public static void main(String[] args) {
findMatch(new Scanner("names.txt"), "Randall", "M");
}
}
它给了我这个输出:
User input = Randall M
fileContains no longer is false.
请注意,我的代码中没有更改任何内容。
如果我将最后一位改为
findMatch(new Scanner("names.txt"), "Jane", "F");
然后这也有效:
User input = Jane F
fileContains no longer is false.
答案 2 :(得分:0)
这条线看起来很可疑。您正在比较line.toUpperCase()
名称,但不会比较性别。
if(line.toUpperCase().contains(name.toUpperCase()) &&
line.contains(gender.toUpperCase()))
你的意思是?
if(line.toUpperCase().contains(name.toUpperCase()) &&
line.toUpperCase().contains(gender.toUpperCase()))