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。

解决方案 »

  1.   

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

  2.   

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

  3.   

    楼上的,楼主意思
    if(str==DIC[i]){
    return i;
    }else{
    return -1;
    }像一楼说的,字符串比较用equals方法,不能用==楼主且这么改下,试试是否可以。
      

  4.   

    说明DIC[i]出现空的情况,可以调试程序,找原因。
    另外代码有点没看懂,第一个for循环中,那个length是什么?
      

  5.   

    同问length是什么,JAVA字符串比较用equals;
      

  6.   

    你以为我真不知道楼主意思 我只想提醒楼主 代码一团乱
    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;
    }
    }
    }
    }
      

  7.   

    你这个程序,直接用循环来进行查找,性能只怕低的要吐血吧建议改为:
      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;
    }
      

  8.   

    不知道你的chineseDic.txt里面放的是什么。temp=DIC[i].toString().split(",", -2);
    DIC[i]=temp[0];可以后面加一句System.out.print(DIC[i]),把DIC[i]都输出,看有没有为null的情况。
    还是str传进来就是null?
      

  9.   

    加了,依旧在这一句if(DIC[i].equals(str))出同样错误。str已经提前打印,不为null
      

  10.   

    chineseDic.txt放的是词条这种格式:
    查缉,v
    查检,v
    查缴,v
    查结率,n
      

  11.   

    但是出现了java.lang.NullPointerException的错误
    很明显 DIC[i] 是空的  你这个字典有问题
      

  12.   

     String[] DIC=readIn("..\\data\\chineseDic.txt");
    这个函数 实现贴出来 
    要么你读文件 没成功 
      

  13.   

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

  14.   

    想跑起来不难吧:最后那段负责比较的:
    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;
    不过我仍然要吐槽下性能。
      

  15.   


    我就觉得奇怪 DIC[i]怎么会是null  代码规范是 DIC[i].equals(str)而不是str.equals(DIC[i])因为 str是变量 DIC[i]相当与是常量 str传进来随时可能null  报空指针错误 readIn 定有问题