使用split划分字符串的问题。
本帖最后由 zwdnet 于 2012-11-08 06:22:31 编辑 我用java写一个电子书管理程序,自己用的。之前是在Linux里用C++和MySQL写的,已经完成了。
现在移植到Windows下,用Java和sqlite3实现。
图书信息都放到一个文本文件里了,如下:
2"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at BookManager.InsertAll(BookManager.java:411)
at BookManager.main(BookManager.java:115)
可以看到,读第一行是对的,到了第二行第一个字段就出问题了,数字格式不对?
开始的时候,读第一行最后一个字段("NULL")就出问题,后来debug发现是最后一个字段后面少了一个空格(" "),可能跟我用split(" ")有关,改了,在所有行最后一个字符后面加了个空格,就对了。但是读第二行的时候还是出错。我不知道该怎么办了,因为从输出来看读取是对的,"2"就是个数字嘛。
麻烦各位帮忙看看,谢谢。
[最优解释]
问题是因为第一行的末尾有回车符,所以回车符跟第二行的2分在一起没法转换成为int。
用BufferedReader.readline(),每次读一行。
fr = new FileReader(fileName);
BufferedReader br = new BufferedReader(fr);
//将文件内容读入字符串
char[] cbuf = new char[1024];
int hasRead = 0;
String[] bookInfoStr = null;
StringBuilder InfoStr = new StringBuilder();
String str = "";
while (( str = br.readLine())!=null)
{
InfoStr.append(str);
}
[其他解释]
String w="四朝政治风云 311 115 /丛书/走向未来丛书/1988年出版 怀效锋 NULL ";
String[] ss=null;
ss=w.split("/");
for(int i=0;i<ss.length;i++){
System.out.println(ss[i]);
}
String[] aa=null;
aa=ss[0].split(" ");
for(int j=0;j<aa.length;j++){
System.out.println(aa[j]);
}
String[] bb=null;
bb=ss[3].split(" ");
for(int z=0;z<bb.length;z++){
System.out.println(bb[z]);
}
四朝政治风云 311 115
丛书
走向未来丛书
1988年出版 怀效锋 NULL
四朝政治风云
311
115
1988年出版
怀效锋
NULL
[其他解释]
为什么不在linux下导出sql格式的直接转mysql
[其他解释]
为什么使用SQLite3。Pure Java的驱动比自带一个dll的驱动慢。
使用HSQL/H2多好。
最好的还是使用db4o。
------其他解决方案--------------------
使用java7或guava里的Files类。
把所有的行读到一个List<String>里。
[其他解释]
你是按字节读取的。 转化成字符串之后中间包含了换行符。 \r\n2 是不能转成数字的
要先移除所有的换行符。 widows下是 \r\n linux 下是 \n
[其他解释]
也是哈~
[其他解释]
不想用mysql了,要登陆,要设用户名密码啥的,我这就是个单机程序,用sqlite挺好。当初是刚学mysql,写的实验程序。
[其他解释]
多谢,我照您的改了,结果对了!
[其他解释]
我以前一直学的C/C++,因为是业余的,没想过要换。学JAVA是因为买了个Android手机,想试试Android编程,那上面好像数据库都是用的sqlite,所以......用到啥就学啥吧。
[其他解释]
多谢,我试试。