检查txt文件是否包含Java中的特定itemNumber

检查txt文件是否包含Java中的特定itemNumber,java,Java,我得到了一个名为“store.txt”的txt文件。我还需要检查文件中的每一行,查看项目编号是否等于输入的项目编号,并返回文件右侧的名称 您在此处看到的该文件的一个示例: item1234, Badesalt item123, Salpetersyre item12, Clorid item1, Kulsyre 这只是一个例子。到目前为止,我几乎得到了它,但再一次,它不是100%好的 到目前为止,我的代码是: // Search for item name and sends it back.

我得到了一个名为“store.txt”的txt文件。我还需要检查文件中的每一行,查看项目编号是否等于输入的项目编号,并返回文件右侧的名称

您在此处看到的该文件的一个示例:

item1234, Badesalt
item123, Salpetersyre
item12, Clorid
item1, Kulsyre
这只是一个例子。到目前为止,我几乎得到了它,但再一次,它不是100%好的

到目前为止,我的代码是:

// Search for item name and sends it back.
String fromFile;
String ItemName = null;
while ((fromFile = file.br.readLine()).contains(itemNumber)) {
    System.out.println("loop going");
    String[] parts = fromFile.split(",");
    ItemName = parts[1];
}
System.out.println("Itemname are: " + ItemName);
所以,我试过了,但效果不太好。如果我输入item number=item1234,我的while循环将循环它2次,并返回item1234,Badesalt,这是我想要的,但我也返回item123,Salpetersyre


那么我该怎么做呢,所以我只得到item1234,Badesalt,如果itemNumber=item1234???

我假设当你说“returns”时,你实际上是指“prints”

此代码将打印名称与
requestedItemName
匹配的所有项目的项目编号

String fromFile;
String requestedItemName = "badesalt";

while ((fromFile = file.br.readLine()).contains(itemNumber)) {

    System.out.println("loop going");
    // Splits up string to get the name
    String[] parts = fromFile.split(",");
    if (requestedItemName.equalsIgnoreCase(parts[1])) {
        System.out.println("Item number is: " + parts[0]);
    }
}
或者,如果您想按项目编号进行搜索,您可以这样做:

String itemNumber = "item1234";
while(...) {
    ...
    if (itemNumber.equalsIgnoreCase(parts[0])) {
        System.out.println("Item name is: " + parts[1]);
    }
}

您必须通过将fromFile的equalness检查为null来迭代循环,而不是检查它是否包含用户条目。因为在循环的第一次迭代中,它检查第一行是否包含用户条目,如果不包含,则直接跳过循环。因此,只有在第一行包含用户条目时,代码才能正常工作。否则,它将不满足循环条件。因此,下面的代码应该可以工作:

String itemNumber = //Comes from user;
String fromFile;
String[] tokens;

while((fromFile = file.br.readLine()) != null) {

   tokens = fromFile.split(", ");

   if(tokens[0].equalsIgnoreCase(itemNumber)) {

      System.out.println(tokens[1]);
      break;
   }

}
那怎么办

    //Store the lines in a Map
    Map<String, String> map = new HashMap<String, String>();
    BufferedReader in = new BufferedReader(new FileReader("sample.txt"));
    String line = "";
    while ((line = in.readLine()) != null) {
        String parts[] = line.split(",");
        map.put(parts[0], parts[1]);
    }
    in.close();

    // Search the item in the map
   if(map.get(itemNumber)!=null)
   {
   ItemName = map.get(itemNumber);
   System.out.println(ItemName);
   }
//将线存储在地图中
Map Map=newhashmap();
BufferedReader in=new BufferedReader(new FileReader(“sample.txt”);
字符串行=”;
而((line=in.readLine())!=null){
字符串部分[]=行分割(“,”);
映射放置(部分[0],部分[1]);
}
in.close();
//在地图中搜索项目
if(map.get(itemNumber)!=null)
{
ItemName=map.get(itemNumber);
System.out.println(ItemName);
}

我试过了。。给我一个小提示(不客气:)我希望你能理解循环条件的变化。您知道,只有当文本文件的第一行包含用户输入时,才满足该条件。您可能希望检查文件的每一行,而不是只检查第一行,不是吗?:)