【发布时间】:2012-09-10 16:01:36
【问题描述】:
在stackoverflow 中验证this post 后,我使用indexOf() 方法来解析文件中的值。以下是我的文件格式-
10/05/2005 10:02;AM;a@xyz.com;student=student1 std=X marks=87 rollnumber=102
10/05/2005 10:05;AM;b@xyz.com;student=student2 std=IX rollnumber=26
10/05/2005 10:15;PM;c@xyz.com;student=student3 std=VII marks=87 attandance=5 rollnumber=12
10/05/2005 10:32;AM;d@xyz.com;student=student4 std=V marks=87 rollnumber=69
注意:电子邮件中的domain name 即xyz.com 不会在任何地方更改。
下面是我目前使用的代码 sn-p-
FileInputStream fis = new FileInputStream(file);
BufferedReader br = new BufferedReader(new InputStreamReader(
fis));
String line = "";
while ((line = br.readLine()) != null) {
int index = -1;
if ((index = line.indexOf("xyz.com")) != -1) {
int inStudent = line.indexOf("student=", index);
int spaceExistsinStudent = -1;
int studentIndex = -1;
if ((spaceExistsinStudent = line.indexOf("student=\"", inStudent)) != -1)
studentIndex = line.indexOf(" ", inStudent);
else
studentIndex = line.indexOf("\" ", spaceExistsinStudent);
int inSTD = line.indexOf("std=", studentIndex);
int spaceExistsinSTD = -1;
int stdIndex = -1;
if ((spaceExistsinSTD = line.indexOf("std=\"", inSTD)) != -1)
stdIndex = line.indexOf(" ", inSTD);
else
stdIndex = line.indexOf("\" ", spaceExistsinSTD);
String studentName = line.substring(inStudent + 9, studentIndex);
String stdName = line.substring(inSTD + 4, stdIndex);
没有必要粘贴整个代码。
好吧,使用上面的实现,我可以工作,但是考虑到性能,这个有效的解决方案吗?实现相同目标的任何更好方法....
提前谢谢您。
【问题讨论】:
-
即使域名在您估计的未来不会发生变化,您也应该编写代码,不要将其嵌入到逻辑中间的固定字符串中。至少让它成为一个成员变量,这样以后就可以在不浪费大量精力的情况下对其进行更改。或者更好的是,将其作为方法的参数,然后伪造配置子系统,直到稍后(当你确实需要它时)。
-
是的,我会记住的......
标签: java string performance parsing indexof