搜索数据 - 不阅读最后一行

Searching through data - not reading last line

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

我设法解决了这个问题,但在最后添加了一条没有数据的假行,以及我会使用的东西,例如 "xxxxxxxxxx",然后它就可以了读取上面的数据,原来是之前的最后一行。这个问题是,我还必须能够直接从我的 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;
                }
            }
        }
    } 

这是它正在搜索的数据: http://i.imgur.com/GeXQhTh.png

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

在您得到最后一行后,只需删除您的 if(data==null) 支票。您将获得下一行,然后检查它是否有效,然后继续,这对于您的 while 循环来说是不必要的。本质上,您正在过滤掉最后一行(因为下一行应该是 null

此外,您可以去掉完全多余的 for 循环,因为每次调用之间没有任何变化(您只与 database[] 对象交互,而 x 永远不会使用过;也就是说,您只是在做同样的事情 data.length() 次)。

像这样修改您的代码:

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;
        }
    }
}
  1. 对于读取文本文件,将readLine放入while条件,这样你 只需要写一次,不需要额外的空检查和中断
  2. 您不必比较数据库[0] 对于每个标记,将 "if" 移到 "for"
  3. 之外