Java 搜索数据-不读取最后一行

Java 搜索数据-不读取最后一行,java,database,search,text-files,Java,Database,Search,Text Files,我有一个程序可以搜索我在文本文件中创建的迷你数据库,一切正常,除了数据最后一行的最后一行不被识别,每当我尝试搜索它时,它都会失败,并且我被告知数据库中不存在数据,虽然当我查看txt文件时,它非常清楚 我设法解决了这个问题,但在末尾添加了一个没有数据的伪行,我会使用诸如xxxxxxxxx之类的东西,然后它能够读取上面的数据,这本来是之前的最后一行。问题是,我还必须能够直接从java程序向函数中添加数据,并且必须首先删除伪行,添加信息,然后再次放入伪行,这将是非常繁琐的,因此我试图找出它为什么不搜索

我有一个程序可以搜索我在文本文件中创建的迷你数据库,一切正常,除了数据最后一行的最后一行不被识别,每当我尝试搜索它时,它都会失败,并且我被告知数据库中不存在数据,虽然当我查看txt文件时,它非常清楚

我设法解决了这个问题,但在末尾添加了一个没有数据的伪行,我会使用诸如xxxxxxxxx之类的东西,然后它能够读取上面的数据,这本来是之前的最后一行。问题是,我还必须能够直接从java程序向函数中添加数据,并且必须首先删除伪行,添加信息,然后再次放入伪行,这将是非常繁琐的,因此我试图找出它为什么不搜索我数据的最后一行

以下是我的一个搜索的代码:

BufferedReader i = new BufferedReader (new FileReader ("Elements.txt"));
String data=i.readLine();
while (data!=null)
    {
        String database[]=data.split(",");
        data=i.readLine();
        if (data!=null)
        {
            for (int x=0;x<data.length(); ++x)
            {
                if (database[0].equalsIgnoreCase(elementName))                                                                                  
                {
                    element=database[0];                                                                                                        
                    symbol=database[1];
                    atomicNumber=database[2];
                    atomicMass=database[3];
                    valence=database[4];

                    found=true;                                                                                                                        
                    break;
                }
            }
        }
    } 
以下是它正在搜索的数据:

你知道如何解决这个问题吗?

只要在得到最后一行后删除ifdata==null检查即可。您将获得下一行,然后检查该行是否有效,然后继续,这对于while循环来说是不必要的。实际上,您正在过滤掉最后一行,因为下一行应该为空


另外,您可以去掉for循环,这是完全多余的,因为每次调用之间没有任何变化,您只与数据库[]对象交互,而x从未使用过;i、 例如,您正在做同样的事情data.length times。

修改代码如下:

BufferedReader i = new BufferedReader(new FileReader("Elements.txt"));
String data;
while ((data = i.readLine()) != null) {
    String database[] = data.split(",");
    if (database[0].equalsIgnoreCase(elementName)) {
        for (int x = 0; x < data.length(); ++x) {
            element = database[0];
            symbol = database[1];
            atomicNumber = database[2];
            atomicMass = database[3];
            valence = database[4];

            found = true;
            break;
        }
    }
}
要读取文本文件,请将readLine置于while状态,以便 只需写一次,不需要额外的空检查和中断 您不必比较数据库[0] 对于每个令牌,如果在for之外,则移动
我尝试了这个方法,但它在这一行给出了一个java.lang.NullPointerException:for int x=0;哇,我没看见。只需消除循环。因为您不再与数据交互,所以它不起任何作用。您只需一遍又一遍地覆盖这些值。因此,请删除断点循环存在的原因,以便它搜索每一行数据,如果我删除该选项,它将不再搜索,而只检查我数据的第一行,这不是我希望它执行的操作。你是说for循环还是while循环?while循环搜索每一行。for循环在数据字符串中迭代一个x值,然后对该值不做任何处理事实上,无论发生什么,您都会立即跳出循环请,请,请,将数据放入或类似的东西中,如果您不希望它出现在问题本身中。不要截图。这样我们就可以直接复制/粘贴,而不必转录代码的输出?您还错过了第一行。。在while循环之前,您已经i.readLine;在while循环中再次调用i.readLine;所以我想你也错过了第一行