一、判断字符串为空、长度为0
刚开始写了如下代码,在一个循环进行处理,若是字符串为空就进行下一次循环。
String rateStr=s[6].trim();
if (rateStr == null)
continue;
Double rate=Double.parseDouble(rateStr);
但是提示empty String异常,最后发现,空字符串和null是不一样的,如下说明:
1. null表示这个字符串不指向任何的东西,如果这时候你调用它的方法,那么就会出现空指针异常。
2.""表示它指向一个长度为0的字符串,这时候调用它的方法是安全的。
3. null不是对象,""是对象,所以null没有分配空间,""分配了空间,例如:
String str1 = null; str引用为空
String str2 = ""; str应用一个空串
str1还不是一个实例化的对象,儿str2已经实例化。
对象用equals比较,null用等号比较。
如果str1=null;下面的写法错误:
if(str1.equals("")||str1==null){ }
正确的写法是 if(str1==null||str1.equals("")){ //先判断是不是对象,如果是,再判断是不是空字符串 }
4. 所以,判断一个字符串是否为空,首先就要确保他不是null,然后再判断他的长度。
String str = xxx;
if(str != null && str.length() != 0) { }
最后修改为如下,执行成功
String rateStr=s[6].trim();
if (rateStr == null || rateStr.length() == 0)
continue;
Double rate=Double.parseDouble(rateStr);
二、java BufferedWriter写数据不完全
程序中写出400行数据,但总是少几行,而且每次少的个数不一样。联想到apue中数据缓冲和冲洗,刚开始以为是没有进行延时或者冲洗的原因,过早的关闭了文件。但对java不太熟悉,直接在网上查找。
发现要保证写出数据完全,文件关闭顺序最好是:
bw.close();
br.close();
先写完再关闭读端。对照发现我的程序中忘记写bw.close()语句,导致读端过早关闭结束了程序导致的。