public static int Search(String str){
String[] DIC=readIn("..\\data\\chineseDic.txt");
String[] temp=new String[8];
for(int i=0;i<length;i++){
temp=DIC[i].toString().split(",", -2);
DIC[i]=temp[0];}
for(int i=0;i<DIC.length;i++)
if(str==DIC[i])
return i;
return -1;
}
为什么这个方法(入口是str,要找的词)总是没法搜到..\\data\\chineseDic.txt词典里的词汇,其中DIC[i]可以正常打印所有词典中的值条目(中文的),编码是GBK。
return i;
return -1;
}这是什么? String比较不能用== 用 if(DIC[i].equals(str))
但是出现了java.lang.NullPointerException的错误
if(str==DIC[i]){
return i;
}else{
return -1;
}像一楼说的,字符串比较用equals方法,不能用==楼主且这么改下,试试是否可以。
另外代码有点没看懂,第一个for循环中,那个length是什么?
public static int Search(String str){
String[] DIC=readIn("..\\data\\chineseDic.txt");
for(int i=0;i<DIC.length;i++){
String[] temp=DIC[i].toString().split(",", -2);
DIC[i]=temp[0];
}
for(int i=0;i<DIC.length;i++){
if(DIC[i]!=null){
if(DIC[i].equals(str))
return i;
else{
return -1;
}
}
}
}
HashMap<String, Integer> DIC = readIn("..\\data\\chineseDic.txt");
重新实现下readIn()函数,让其返回一个 HashMap,不要用数组了,查找太不方便了。
Key用单词,Value用行位置。
那么程序可以简化为:
public static int Search(String str){
HashMap<String, Integer> DIC = readIn("..\\data\\chineseDic.txt"); // 这个最好只做一次;
Integer pos = DIC.get(str);
return (pos==null) ? -1 : pos;
}
DIC[i]=temp[0];可以后面加一句System.out.print(DIC[i]),把DIC[i]都输出,看有没有为null的情况。
还是str传进来就是null?
查缉,v
查检,v
查缴,v
查结率,n
很明显 DIC[i] 是空的 你这个字典有问题
这个函数 实现贴出来
要么你读文件 没成功
for(int i=0;i<DIC.length;i++)
if(str==DIC[i])
return i;
return -1;
}修改下:
if (str != null) {
for(int i=0;i<DIC.length;i++)
if(str.equals(DIC[i])) return i;
}
return -1;
不过我仍然要吐槽下性能。
我就觉得奇怪 DIC[i]怎么会是null 代码规范是 DIC[i].equals(str)而不是str.equals(DIC[i])因为 str是变量 DIC[i]相当与是常量 str传进来随时可能null 报空指针错误 readIn 定有问题