Java 在文件中查找字符串,然后复制其后的行
这是我第一次张贴到这个网站,所以如果我得到任何格式错误,请对我轻松Lol 我正在编写一个Java程序,需要从清单中查找零件号,然后打印零件号及其后面的数据。代码只打印出文件顶部的信息,然后重复我的else语句5次 代码如下:Java 在文件中查找字符串,然后复制其后的行,java,Java,这是我第一次张贴到这个网站,所以如果我得到任何格式错误,请对我轻松Lol 我正在编写一个Java程序,需要从清单中查找零件号,然后打印零件号及其后面的数据。代码只打印出文件顶部的信息,然后重复我的else语句5次 代码如下: package inventory; import java.util.Scanner; import java.io.*; public class inventory { public static void main(String[] args) throws
package inventory;
import java.util.Scanner;
import java.io.*;
public class inventory
{
public static void main(String[] args) throws IOException
{
Scanner keyboard = new Scanner(System.in);
// File Information
String parts;
File inventoryFile;
FileWriter inventoryFW;
PrintWriter inventoryPW;
Scanner inventorySC;
//User Information
String userChoice;
// Part Information
String partID, partFileID, partFileDesc, partFileLoc, partDesc, partLoc;
double partFilePrice, partPrice;
int partFileQuan, partQuan;
userChoice = ("A");
// Loop
if(userChoice.equalsIgnoreCase("Q"))
System.exit(0);
else
while(!userChoice.equalsIgnoreCase("Q"))
{
// Get Employee Decision
System.out.println("Please choose a letter: \n"
+ "L - Look Up Part \n"
+ "A - Add to Inventory File \n"
+ "E - Erase From Inventory File \n"
+ "G - Generate a Sales Slip \n"
+ "I - Add Quantity to Inventory File \n"
+ "D - Display Inventory \n"
+ "Q - Quit \n"
+ "Selection: ");
userChoice = keyboard.nextLine();
// Process User Choice
if(userChoice.equalsIgnoreCase("L"))
{ // Choice L
// Look Up Part
System.out.println("Enter Part I.D. Number: ");
partID = keyboard.nextLine();
// Do until partID is equal to partFileID
parts = "inventoryFile.txt";
inventoryFile = new File(parts);
inventorySC = new Scanner(inventoryFile);
partFileID = "0";
partFileDesc = "0";
partFilePrice = 0;
partFileLoc = "0";
partFileQuan = 0;
while(inventorySC.hasNextLine())
{
String lineFromFile = inventorySC.nextLine();
if(lineFromFile.contains(partID))
{
partFileDesc = inventorySC.nextLine();
partFilePrice = inventorySC.nextDouble();
inventorySC.nextLine();
partFileLoc = inventorySC.nextLine();
partFileQuan = inventorySC.nextInt();
System.out.println("Part I.D. Number: " + partFileID + "\n");
System.out.println("Part Description: " + partFileDesc + "\n"
+ "Part Price: " + partFilePrice + "\n"
+ "Part Location: " + partFileLoc + "\n"
+ "Part Quantity: " + partFileQuan);
}
else
System.out.println("Sorry, this part cannot be found");
}
}
}
}
}
这是我试图从中提取的数据文件:
1234567
Clutch
45.68
Warehouse B
8
1234
Brake
66.78
Warehouse A
4
例如,如果用户输入零件号“1234”,程序应在文件中搜索该零件号,然后显示:
1234
Brake
66.78
Warehouse A
4
对于任何糟糕的代码格式,我感到抱歉,我已经为此奋斗了一段时间。
任何帮助都将不胜感激 您的问题是,仅当零件列表不包含您的零件值时,才跳到下一行。如果零件不在“下一行”上,您实际上要跳过5行 在“else”语句中,只需调用inventorySC.nextLine();4次以上,以到达文件中实际要检查零件号的下一个位置 如果您希望“未找到”条件更有效地反映出实际上根本找不到零件号,则需要在扫描整个文件后将该消息移动到。在文件扫描之前,将名为“found”的布尔值设置为false。如果因为包含输入的文件中有零件号而输入“contains”条件,请将“found”设置为true
最后,如果“found”仍然为“false”,则可以输出“notfound”消息。存在一些问题
正如MadProgrammer在上面所评论的,您需要使用“equals”而不是“contains”——这就是为什么您要在第一个条目上进行匹配。当您找到一个匹配项并输出它时,您需要使用“break”退出while循环,否则您将为剩余的每一行输出else值(正如您所经历的那样)。但还有一个问题是,当没有匹配项时,您可能需要读取整个记录,而不仅仅是记录的第一行,这样在搜索零件号1234时,当库存项目的数量为1234时,您就不会出错。
1234567
包含1234
。。。也许考虑使用<代码>等于<代码>
boolean found = false;
while(inventorySC.hasNextLine()){
String lineFromFile = inventorySC.nextLine();
if(lineFromFile.equals(partID)) {
partFileDesc = inventorySC.nextLine();
partFilePrice = inventorySC.nextLine();
partFileLoc = inventorySC.nextLine();
partFileQuan = inventorySC.nextLine();
System.out.println("Part I.D. Number: " + partFileID + "\n");
System.out.println("Part Description: " + partFileDesc + "\n"
+ "Part Price: " + partFilePrice + "\n"
+ "Part Location: " + partFileLoc + "\n"
+ "Part Quantity: " + partFileQuan);
found = true;
break;
}
}
if(!found)
System.out.println("Sorry, this part cannot be found");