看似简单却搞不定的问题。。。

gdufs_lswu 2012-07-16 03:50:46

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。
...全文
157 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
风火轮 2012-07-16
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 的回复:]

问题解决了,是这样str.equals(DIC[i])而不是DIC[i].equals(str)。谢谢大家,结贴
[/Quote]

我就觉得奇怪 DIC[i]怎么会是null 代码规范是 DIC[i].equals(str)而不是str.equals(DIC[i])

因为 str是变量 DIC[i]相当与是常量 str传进来随时可能null 报空指针错误 readIn 定有问题
MiceRice 2012-07-16
  • 打赏
  • 举报
回复
想跑起来不难吧:

最后那段负责比较的:
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;


不过我仍然要吐槽下性能。
gdufs_lswu 2012-07-16
  • 打赏
  • 举报
回复
问题解决了,是这样str.equals(DIC[i])而不是DIC[i].equals(str)。谢谢大家,结贴
风火轮 2012-07-16
  • 打赏
  • 举报
回复
String[] DIC=readIn("..\\data\\chineseDic.txt");
这个函数 实现贴出来
要么你读文件 没成功
gdufs_lswu 2012-07-16
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

你这个程序,直接用循环来进行查找,性能只怕低的要吐血吧。。。

建议改为:
HashMap<String, Integer> DIC = readIn("..\\data\\chineseDic.txt");
重新实现下readIn()函数,让其返回一个 HashMap,不要用数组了,查找太不方便了。
Key用单词,Value用行位置。


那么程序可以简化为:
pub……
[/Quote]
感谢指点,不过现在是跑都跑不起来。。。。
风火轮 2012-07-16
  • 打赏
  • 举报
回复
但是出现了java.lang.NullPointerException的错误
很明显 DIC[i] 是空的 你这个字典有问题
gdufs_lswu 2012-07-16
  • 打赏
  • 举报
回复
chineseDic.txt放的是词条这种格式:
查缉,v
查检,v
查缴,v
查结率,n
gdufs_lswu 2012-07-16
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

不知道你的chineseDic.txt里面放的是什么。

temp=DIC[i].toString().split(",", -2);
DIC[i]=temp[0];

可以后面加一句System.out.print(DIC[i]),把DIC[i]都输出,看有没有为null的情况。
还是str传进来就是null?
[/Quote]
加了,依旧在这一句if(DIC[i].equals(str))出同样错误。str已经提前打印,不为null
brightyq 2012-07-16
  • 打赏
  • 举报
回复
不知道你的chineseDic.txt里面放的是什么。

temp=DIC[i].toString().split(",", -2);
DIC[i]=temp[0];

可以后面加一句System.out.print(DIC[i]),把DIC[i]都输出,看有没有为null的情况。
还是str传进来就是null?
MiceRice 2012-07-16
  • 打赏
  • 举报
回复
你这个程序,直接用循环来进行查找,性能只怕低的要吐血吧。。。

建议改为:
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;
}


风火轮 2012-07-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

楼上的,楼主意思
if(str==DIC[i]){
return i;
}else{
return -1;
}

像一楼说的,字符串比较用equals方法,不能用==

楼主且这么改下,试试是否可以。
[/Quote]
你以为我真不知道楼主意思 我只想提醒楼主 代码一团乱


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;
}
}
}
}

  • 打赏
  • 举报
回复
同问length是什么,JAVA字符串比较用equals;
gdufs_lswu 2012-07-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

引用 2 楼 的回复:

用了 if(DIC[i].equals(str))
但是出现了java.lang.NullPointerException的错误

说明DIC[i]出现空的情况,可以调试程序,找原因。
另外代码有点没看懂,第一个for循环中,那个length是什么?
[/Quote]
这个length是字典条目数
brightyq 2012-07-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

用了 if(DIC[i].equals(str))
但是出现了java.lang.NullPointerException的错误
[/Quote]
说明DIC[i]出现空的情况,可以调试程序,找原因。
另外代码有点没看懂,第一个for循环中,那个length是什么?
brightyq 2012-07-16
  • 打赏
  • 举报
回复
楼上的,楼主意思
if(str==DIC[i]){
return i;
}else{
return -1;
}

像一楼说的,字符串比较用equals方法,不能用==

楼主且这么改下,试试是否可以。
gdufs_lswu 2012-07-16
  • 打赏
  • 举报
回复
用了 if(DIC[i].equals(str))
但是出现了java.lang.NullPointerException的错误
风火轮 2012-07-16
  • 打赏
  • 举报
回复
if(str==DIC[i])
return i;
return -1;
}

这是什么? String比较不能用== 用 if(DIC[i].equals(str))

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧