首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

使用split划分字符串的有关问题

2012-12-25 
使用split划分字符串的问题。本帖最后由 zwdnet 于 2012-11-08 06:22:31 编辑我用java写一个电子书管理程序

使用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
[其他解释]

引用:
为什么不在linux下导出sql格式的直接转mysql

也是哈~
[其他解释]
引用:
为什么不在linux下导出sql格式的直接转mysql

不想用mysql了,要登陆,要设用户名密码啥的,我这就是个单机程序,用sqlite挺好。当初是刚学mysql,写的实验程序。
[其他解释]
引用:
问题是因为第一行的末尾有回车符,所以回车符跟第二行的2分在一起没法转换成为int。
用BufferedReader.readline(),每次读一行。
            fr = new FileReader(fileName);
            BufferedReader br = new BufferedReader(fr);
        ……

多谢,我照您的改了,结果对了!
[其他解释]
引用:
为什么使用SQLite3。Pure Java的驱动比自带一个dll的驱动慢。
使用HSQL/H2多好。
最好的还是使用db4o。

我以前一直学的C/C++,因为是业余的,没想过要换。学JAVA是因为买了个Android手机,想试试Android编程,那上面好像数据库都是用的sqlite,所以......用到啥就学啥吧。
[其他解释]
引用:
使用java7或guava里的Files类。
把所有的行读到一个List<String>里。

多谢,我试试。

热点排行