【问题标题】:Searching through data - not reading last line搜索数据 - 不读取最后一行
【发布时间】:2015-01-10 01:48:46
【问题描述】:

我有一个程序可以搜索我在文本文件中创建的迷你数据库,一切正常,除了数据的最后一行中的最后一行没有被识别以及每当我尝试时搜索它,它会失败,我被告知数据库中不存在数据,尽管当我查看 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

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

【问题讨论】:

  • 拜托,拜托,请把数据放到pastebin 或类似的地方,如果你不希望它出现在问题本身中。不要截图。这样我们就可以直接复制/粘贴,而不必转录。
  • 你的代码输出?
  • 你也错过了第一行..在while循环之前你已经 i.readLine();并在 while 循环中再次调用 i.readLine();所以我想你也错过了第一行

标签: java database search text-files


【解决方案1】:

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

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

【讨论】:

  • 我试过这个,但它在这一行给了我一个 java.lang.NullPointerException:for (int x=0;x
  • 哎呀,我没看到。只需消除循环。它什么也不做,因为您不再与数据交互。 (你只是一遍又一遍地覆盖这些值)
  • 另外,删除break
  • 存在循环的原因是它搜索数据的每一行,如果我删除它,它将不再搜索并且只检查我的数据的第一行,这不是我想要的它要做。你是指for循环还是while循环?
  • 您的while 循环搜索每一行。您的 for 循环通过您的 data 字符串迭代 x 值,然后对该值不执行任何操作(事实上,无论如何,您都会立即跳出循环)
【解决方案2】:

像这样修改你的代码:

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”之外

【讨论】:

    猜你喜欢
    • 2014-07-19
    • 2016-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多