在数组中搜索字符串

时间:2013-04-17 13:48:10

标签: java arrays methods

下面我试图创建一个方法,在数组中搜索某个字符串并返回它的位置,如果不存在,那么-1应该是返回的数字。下面我使用该方法搜索一个单词,即使单词在数组中,它也会返回-1。这是为什么?

    String answer = "";

    System.out.println("Enter word to search within array");
    answer = in.next();


       public static int search(String[] theWords, String answer) {
         int a = -1;
         for(int i = 0; i < theWords.length; i++) {
             if (answer.equals(theWords[i])){
                 a = i;
                 break;
             }
         } 
         return a;
     }

2 个答案:

答案 0 :(得分:4)

我看不出代码有什么问题,但我建议删除保存返回值的局部变量:

 public static int Search(String[] thewords, String answer) {
     for (int i = 0; i < thewords.length; i++) {
         if (answer.equals(thewords[i])){
             return i;
         }
     } 
     return -1;
 }

使用这种简化的逻辑,此代码中很少或根本没有错误。


我认为这是课程工作,不允许使用库方法。如果您被允许,您的方法可以是一行:

return Arrays.asList(theWords).indexOf(answer);

答案 1 :(得分:1)

您可以选择复制数组,因为方法的使用者可能不需要排序

public static int Search(String[] thewords, String answer) {  
     if(thewords == null) {  
        throw new NullPointerException();  
     }  
     String[] copy = new String[thewords.length];  
     System.arraycopy(thewords,0,copy,0,copy.length);  
     Arrays.sort(thewords);    
     return Arrays.binarySearch(thewords, answer);  
}  

注意:它会返回-pos而不是-1

如果您需要-1

public static int Search(String[] thewords, String answer) {  
     if(thewords == null) {  
        throw new NullPointerException();  
     }  
     String[] copy = new String[thewords.length];  
     System.arraycopy(thewords,0,copy,0,copy.length);  
     Arrays.sort(thewords);  
     int idx = Arrays.binarySearch(thewords, answer);  
     return idx < 0? -1:idx;  
}  

关于您的代码:我认为问题与套管或间距有关:
替换为:if (answer.equalsIgnoreCase(theWords[i].trim())){

对于大型数组,请使用二进制搜索。