搜索数据 - 不阅读最后一行
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;
}
}
}
- 对于读取文本文件,将readLine放入while条件,这样你
只需要写一次,不需要额外的空检查和中断
- 您不必比较数据库[0]
对于每个标记,将 "if" 移到 "for"
之外
我有一个程序可以搜索我在文本文件中创建的迷你数据库,一切正常,除了数据最后一行中的最后一行无法识别并且每当我试图搜索它,它会失败,我被告知数据库中不存在该数据,尽管当我查看 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;
}
}
}
- 对于读取文本文件,将readLine放入while条件,这样你 只需要写一次,不需要额外的空检查和中断
- 您不必比较数据库[0] 对于每个标记,将 "if" 移到 "for" 之外