2016-06-02 5 views
0

아래의 배열 목록에서 문자열이 제대로 작동하는지 검색하려고합니다. 그러나 문제는 내가 찾고있는 문자열이 일부 텍스트 예제 "XXXXTESTXXXX"사이에 포함될 때입니다. 바이너리 검색은 지금까지 내가 찾지 못한 것 같습니다. 또한 "포함"방법을 시도했지만 어느 쪽도 작동하지 않았습니다. 내가 어디로 잘못 가고 있는지 모르겠다. 제발 제안 해주세요.자바 이진 검색 배열 목록

Array Content :[PIGEON, XXXBEARXXX , XXXCAT, XXXDOG, XXXELEPHANTXXX , XXXHORSEXXX , XXXLIONXXX , XXXMOUSEXXX , XXXOWLXXX , XXXPARROTXXX , XXXTIGERXXX ] 

예 검색 문자열 : -

Search String = "BEAR" 

코드

ArrayList File_F1_Array = new ArrayList(); 
    // Read the lines of the Source file (File_1) in to Arraylist 
    try { 
     BufferedReader File_F1_Br = new BufferedReader (new FileReader(File_F1)); 
     while ((File_F1_Line = File_F1_Br.readLine()) !=null) { 
      File_F1_Array.add(File_F1_Line); 
     } 
     File_F1_Br.close(); 

    } catch (Exception e) { 
     e.printStackTrace();  
    } 

    // Sort the array list 
    Collections.sort(File_F1_Array); 

     // Search lines from Refernce file (File_2) in Arraylist 
     try { 
      BufferedReader File_F2_br = new BufferedReader (new FileReader(File_F2)); 
      while ((File_F2_Line = File_F2_br.readLine()) !=null) { 

       int index = Collections.binarySearch(File_F1_Array, File_F2_Line); 

       boolean StringCheck = File_F1_Array.contains(File_F2_Line); 
       } 
+0

글쎄, 당신은 무엇을 기대 했습니까? 두 메소드 모두'.equals'를 사용하여 정확한 문자열 비교를합니다. –

+0

나는 목록을 * trie * (* tree *와 혼동하지 말 것)로 변환하여 O에서 조회를 수행 할 수 있다고 생각한다. 로그 n) 시간 (* n * 단어의 수). –

+0

하위 문자열을 찾는 데 이진 검색이 작동하지 않습니다. – user2357112

답변

0

알고리즘이 정확하지! 당신은 "xx ..."를 가진 배열에서 검색하고 "xx ..."s를 없애고 싶습니다! 당신은 "xx .."없이 다른 arraylist를 만들어야하고 Xs로 첫 번째 배열을 유지하기 위해 2 개의 배열 사이에 바인딩 키를 써야합니다.