当前位置: 首页 > 知识库问答 >
问题:

为什么我的程序不返回我在txt文件中搜索的文件行?

阎善
2023-03-14

嗨,这让我感到困惑,我正在尝试搜索我的文件中的选定数字,然后用该行的其余部分显示该数字,问题是我的程序似乎在我搜索它时返回第一行内容,但当我键入搜索它们时不会返回第二行或第三行

public static String searchProject(String searchTerm, String filepath) {
        String findString = "";
        boolean found = false;
        String projectNumber = "";
        String projectName = "";
        String typeProject = "";
        String address = "";
        String erf = "";
        String fee = "";
        String paid = "";
        String deadline = "";
        String finalised = "";
        String architectName = "";
        String architectTel = "";
        String architectEmail = "";
        String architectAddress = "";
        String contractorName = "";
        String contractorTel = "";
        String contractorEmail = "";
        String contractorAddress = "";
        String customerName = "";
        String customerTel = "";
        String customerEmail = "";
        String customerAddress = "";

        try {
            Scanner userInput = new Scanner(System.in);
            userInput = new Scanner(new File(filepath));
            userInput.useDelimiter("[,\n]");

            while (userInput.hasNext() && !found) {
                projectNumber = userInput.next();
                projectName = userInput.next();
                typeProject = userInput.next();
                address = userInput.next();
                erf = userInput.next();
                fee = userInput.next();
                paid = userInput.next();
                deadline = userInput.next();
                finalised = userInput.next();
                architectName = userInput.next();
                architectTel = userInput.next();
                architectEmail = userInput.next();
                architectAddress = userInput.next();
                contractorName = userInput.next();
                contractorTel = userInput.next();
                contractorEmail = userInput.next();
                contractorAddress = userInput.next();
                customerName = userInput.next();
                customerTel = userInput.next();
                customerEmail = userInput.next();
                customerAddress = userInput.next();

                if (projectNumber.equals(searchTerm)) {
                    findString = "\nProject Number: " + projectNumber + "\nProject Name: " + projectName + "\nType Project: " + typeProject + "\nAddress: "
                            + address + "\nERF number: " + erf + "\nTotal fee: R" + fee + "\nPaid to date: R" + paid + "\nProject Deadline: "
                            + deadline + "\nIs the project finalised: " + finalised + "\nArchitect Name: " + architectName + "\nArchitect Telephone: " + architectTel + "\nArchitect Email: "
                            + architectEmail + "\nArchitect Address: " + architectAddress + "\nContractor Name: " + contractorName + "\nContractor Telephone: " + contractorTel + "\nContractor Email: "
                            + contractorEmail + "\nContractor Address: " + contractorAddress + "\nCustomer Name: " + customerName + "\nCustomer Telephone: " + customerTel + "\nCustomer Email: "
                            + customerEmail + "\nCustomer Address: " + customerAddress;
                    System.out.println(findString);
                }
            }
        } catch (Exception e) {

        }
        return findString;
    }

我的 txt 文件内容

1,House mack,house,123 mack road,155,100000,40000,2022-09-14,no,Bill,123456,bill@gmail.com,12 Bill road,Jack,456789,jack@gmail.com,23 Jack road,John,789632,john@gmail.com,34 John road,
2,House John,house,123 John road,183,160000,50000,2022-09-10,yes,Bill,123456,bill@gmail.com,12 Bill road,Jack,456789,jack@gmail.com,23 Jack road,John,789632,john@gmail.com,34 John road,
3,House bill,house,123 bill road,193,160000,50000,2022-09-10,yes,Bill,123456,bill@gmail.com,12 Bill road,Jack,456789,jack@gmail.com,23 Jack road,John,789632,john@gmail.com,34 John road,

我正在寻找的输出

Please enter the project number to find the task: 1

Project Number: 1
Project Name: House mack
Type Project: house
Address: 123 mack road
ERF number: 155
Total fee: R100000
Paid to date: R40000
Project Deadline: 2022-09-14
Is the project finalised: no
Architect Name: Bill
Architect Telephone: 123456
Architect Email: bill@gmail.com
Architect Address: 12 Bill road
Contractor Name: Jack
Contractor Telephone: 456789
Contractor Email: jack@gmail.com
Contractor Address: 23 Jack road
Customer Name: John
Customer Telephone: 789632
Customer Email: john@gmail.com
Customer Address: 34 John road

当我键入2或3以查找项目时,我的程序不显示任何问题,我该如何解决它?

共有1个答案

孟思远
2023-03-14

问题是您的文本文件包含的列比解析代码预期的多一列(它在最后一个数据字段之后包含一个这使得它总共有22列,您只读取其中的21列)。

由于这种不匹配,“第二”项目的读取从第一行的最后一个空字段开始,而不是从第二行的项目编号开始。

要检查这一点,您可以在阅读后立即写出< code>projectNumber:

            projectNumber = userInput.next();
            System.out.println("projectNumber=" + projectNumber);

解决这个问题的一种方法是在读取一行的所有字段后添加一个额外的userInput.nextLine();

            customerAddress = userInput.next();
            userInput.nextLine();

但是依我看,更好的办法是重写代码,一行一行地读,把每一行单独分成几列。通过将整个文件作为一系列列来读取,您忽略了数据的结构,而这种结构可以帮助您发现数据和/或代码中的错误。

附加说明:为什么要创建一个new Scanner(System.in);如果你从来没有使用过它?我说的是这两行:

    Scanner userInput = new Scanner(System.in);
    userInput = new Scanner(new File(filepath));

您应该将这两行替换为一行

    Scanner userInput = new Scanner(new File(filepath));
 类似资料:
  • 我试图从我的Java程序中读取一个充当数据库的. txt文件。在通过TextEdit和使用FileWriter类运行程序之前,我已经写入了该文件Java但是在运行这些代码行后,程序仍然显示一个空数组。这是唯一造成问题的地方,当我使用ArrayList作为临时数据库时,我代码的其余部分(此处未显示)运行良好。有人能帮我找出为什么. txt文件总是空的吗?

  • 问题内容: 我正在尝试使用php创建一个脚本,该脚本将在文本文件中搜索并获取整行并回显它。 我有一个名为“ numorder.txt”的文本文件(.txt),并且在该文本文件中有几行数据,每5分钟会有新行出现(使用cron作业)。数据类似于: 我将如何创建一个php脚本来搜索数据“ aullah1”,然后抓起整行并回显它?(一旦回显,它应该显示“ 2 aullah1”(不带引号)。 如果我没有清楚

  • 问题内容: 我正在尝试打开一个保存在源文件夹本身中的CSV文件名“ logger.csv”。 但是,这一直在给我一个“找不到文件”错误。 问题答案: 如果您现在就使用相对路径,则该文件需要存在于项目根目录中, 而不是 存在于java文件的目录中。 考虑以下层次结构: 不管用。 将 现在 的工作。(注意,该文件与src目录相邻。)

  • 问题内容: 我在asp.net项目的Content文件夹中有一个json文件: …以及访问它的代码: …但是调用代码时什么也没发生;浏览器控制台说:“无法加载资源:服务器响应状态为404(未找到)” 为什么找不到?“波浪号文件名”不是通往文件的正确路径吗? 更新 我还尝试了向后“重击”: …并且得到相同的结果(“ 无法加载资源:服务器以404(未找到)状态进行响应 ”) 更新2 然后,我尝试了这种

  • 见下图。我的.gitignore文件应该忽略src/dist中的所有文件,但事实并非如此。

  • 问题内容: 我是全文搜索的新手,我使用以下查询 学生表包含数百万条随机记录,看起来像这样的“ QZAQHIEK VABCNLRM KFFZJYUU” 仅用了2秒,就产生了1100行。 如果在两秒钟内搜索了百万条记录,为什么我还要使用全文搜索呢? Like谓词是否也使用了全文索引? 问题答案: 我认为您已经回答了自己的问题,至少感到满意。如果您的原型制作在可接受的时间内产生了结果,并且您确信高速缓存