在Java ArrayList中搜索逗号分隔的值-字符串和整数组合。

在Java ArrayList中搜索逗号分隔的值-字符串和整数组合。,java,Java,首先,谢谢你所做的一切。我是Java新手,我正在创建一个程序来询问用户姓名、票证类型和罚款金额。我正在将这些信息写入一个文本文件(project.txt)。我正在使用Scanner readArray读取txt文件的内容,然后将内容排序到“列表”数组中。我已经按字母顺序对列表进行了排序,现在我想在数组中搜索从用户输入中输入的关键字。列表存储为“name,ticket type,fine(例如:mike,speeding,250.00)”。当用户输入要搜索的名称(例如:mike)时,找不到我……即

首先,谢谢你所做的一切。我是Java新手,我正在创建一个程序来询问用户姓名、票证类型和罚款金额。我正在将这些信息写入一个文本文件(project.txt)。我正在使用Scanner readArray读取txt文件的内容,然后将内容排序到“列表”数组中。我已经按字母顺序对列表进行了排序,现在我想在数组中搜索从用户输入中输入的关键字。列表存储为“name,ticket type,fine(例如:mike,speeding,250.00)”。当用户输入要搜索的名称(例如:mike)时,找不到我……即使mike,speed,100.00在project.txt中。我觉得它与逗号分隔的值有关,但是,我必须以这种方式格式化。代码如下(请友好!我会在代码运行后清理它…)

import java.util.*;
导入java.io.*;
导入java.lang.reflect.Array;
导入java.text.Collator;
公共类项目{
公共静态void main(字符串[]args)引发IOException{
字符串名称=”;
字符串ticketType=“”;
双倍罚款;
退出;
布尔控制=真;
while(续){
做{
PrintStream out=新的PrintStream(新的FileOutputStream(“Project.txt”,true));
扫描仪输入=新扫描仪(System.in);
System.out.println(“名称:”);
name=input.nextLine();
System.out.println(“票证类型:”);
ticketType=input.nextLine();
System.out.println(“精细:”);
fine=input.nextDouble();
System.out.println(“如果输入完毕,请按'q'或'c'继续输入”);
quit=input.next().toLowerCase().charAt(0);
打印(名称+“,”);
打印(票号类型+“,”);
out.printf(“%.2f”,罚款);
out.println();
out.close();
}
而(!(quit='q'){
系统输出打印项次(“完成”);
}
扫描仪输入=新扫描仪(System.in);
System.out.println(“您确定完成了吗”);
System.out.println(“输入y表示完成,输入n表示输入更多”);
char Continue=input.next().toLowerCase().charAt(0);
如果(Continue==('y')){
cont=假;
}
//完成输入要列出的名称
//现在读入文件以按字母顺序排列和排序
}
Scanner readArray=new Scanner(新文件(“Project.txt”);
ArrayList=新建ArrayList();
while(readArray.hasNext()){
添加(readArray.next().toLowerCase());
}
readArray.close();
Collections.sort(list,Collator.getInstance());//按字母顺序对数组排序
list.forEach(System.out::println);//将数组打印为list','分隔
扫描仪搜索=新扫描仪(System.in);
System.out.println(“搜索关键字:”);
字符串关键字=search.next().toLowerCase();
System.out.println(“搜索:”+关键字);
if(list.contains(关键字)){
System.out.println(“找到”);
}
否则{
System.out.println(“未找到”);
}
}
}

如果只读取文件中的下一个标记,请按如下方式读取整行:

while (readArray.hasNext()){
    list.add(readArray.nextLine().toLowerCase());

}
以下情况也可以这样说:

String keyword = search.nextLine().toLowerCase();
如果仅搜索名称,则Arkadly是正确的:

while (readArray.hasNext()){
    String name = readArray.nextLine().toLowerCase().split(",")[0];

    list.add(name);

}
顺便说一下,ArrayList的.contains与字符串的.contains的工作方式不同。它在ArrayList中查找特定元素:

如果您只读取文件中的下一个标记,请按如下方式读取整行内容:

while (readArray.hasNext()){
    list.add(readArray.nextLine().toLowerCase());

}
以下情况也可以这样说:

String keyword = search.nextLine().toLowerCase();
如果仅搜索名称,则Arkadly是正确的:

while (readArray.hasNext()){
    String name = readArray.nextLine().toLowerCase().split(",")[0];

    list.add(name);

}
顺便说一下,ArrayList的.contains与字符串的.contains的工作方式不同。它在ArrayList中查找特定元素:

正如阿卡迪正确地提到的,列表中没有“迈克”,而是“迈克,超速,250.00”

一种可能的简单搜索实现是:

  String keyword = search.next().toLowerCase();
  System.out.println("searching for: " + keyword);

  boolean found = false;
  for (String element : list) {
    if (element.contains(keyword)) {
      found = true;
    }
  }

  if (found) {
    System.out.println("found");
  }
  else {
    System.out.println(" not found");
  }
}

正如Arkadiy正确提到的,列表中没有“mike”,而是“mike,超速行驶,250.00”

一种可能的简单搜索实现是:

  String keyword = search.next().toLowerCase();
  System.out.println("searching for: " + keyword);

  boolean found = false;
  for (String element : list) {
    if (element.contains(keyword)) {
      found = true;
    }
  }

  if (found) {
    System.out.println("found");
  }
  else {
    System.out.println(" not found");
  }
}

1) 为什么要制作几个扫描仪?2)while循环应该是-->while(readArray.hasnetline()){list.add(readArray.nextLine().toLowerCase());}。我并不是说它解决了你的问题,但至少我们现在有所进展。我相信你的文本中包含逗号。例如:“迈克”,谢谢你的意见!我会清理扫描仪,但这不是我的问题。约翰尼,当我搜索“mike”时,我也会收到一个找不到的输出…如果你对你正在做的事情的描述是正确的,那么你的列表中不包含
“mike”
。它包含
“迈克,超速,250.00”
。1)你为什么要做几个扫描仪?2) while循环应该是-->while(readArray.hasNextLine()){list.add(readArray.nextLine().toLowerCase());}。我并不是说它解决了你的问题,但至少我们现在有所进展。我相信你的文本中包含逗号。例如:“迈克”,谢谢你的意见!我会清理扫描仪,但这不是我的问题。约翰尼,当我搜索“mike”时,我也会收到一个找不到的输出…如果你对你正在做的事情的描述是正确的,那么你的列表中不包含
“mike”
。它包含
“迈克,超速,250.00”