2017-01-26 12 views
0
File fe = new File("C:\\Users\\" + System.getProperty("user.name") + "\\desktop" + "\\SearchResults.txt"); 
    String customLoca = "C:\\Users\\" + System.getProperty("user.name") + "\\AppData" + "\\roaming" + "\\.minecraft" + "\\mods" + "\\1.7.10"; 

    FileWriter fw = null; 
    try { 
     fw = new FileWriter(fe); 
    } catch (IOException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 

    File dir = new File(customLoca); 
    for (File f : dir.listFiles()) { 
     if (f.getName().contains("Toggle")){ 
      try { 
       fw.write("Found: " + f.getName()); 
       fw.write("\r\n==="); 
       fw.write("\r\n"); 

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

     } 
    } 
    try { 
     fw.close(); 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 

} 
} 

기본적으로 위의 코드는 결과가 포함 된 텍스트 문서를 만듭니다. 그러나이 검색 엔진은 결과가 원하는 텍스트 파일을 만듭니다. . 예를 들어 "토글"을 "토글"로 바꾼 경우 아무 것도 나타나지 않습니다. 이 대소 문자를 구분하지 못하게 할 수있는 방법이 있습니까? 또한 else 인수를 추가 할 수있는 방법이 있습니까? 따라서 아무 것도 발견되지 않으면 텍스트 문서에 "아무것도 찾을 수 없음"이 인쇄됩니다. 감사.Java Directory Search - 민감한 캐스트 및 1 문자열 만 검색 가능

답변

0

당신은 수표에 !string.equalsIgnoreCase()으로 시도 할 수 있습니다 -이 같은 것을 적용하려고 :

if (!toggle.equalsIgnoreCase(file.getName())) 

편집 :

 StringBuilder paragraph = new StringBuilder(); 
     paragraph.append("I am at office.") 
       .append("I work at oFFicE.") 
       .append("My OFFICE"); 
     String searchWord = "office"; 
     Pattern pattern = Pattern.compile(searchWord, Pattern.CASE_INSENSITIVE); 
     Matcher matcher = pattern.matcher(paragraph); 
     int count = 0; 
     while (matcher.find()) 
      count++; 
     System.out.println(count); 
: 또한이 코드 조각을 리팩토링을 시도 할 수

+0

나는 반드시 만들어야 할 것입니다! 변수로 전환? 나는 기본적으로 디렉토리에서 "토글 (toggle)"을 포함하는 파일 이름을 검색하기를 원합니다. 여러 인자를 추가하고 싶습니다. 따라서 파일 이름을 검색합니다 "토글"+ "CPS"+ "방향" – harry

0

전체 이름과 일치해야하기 때문에 equalsIgnoreCase()를 사용할 수 없습니다. 추천 :

  • 사용 정규식은 모든 방법을 확장 할 수 자원

  • 시도를하려고 이름

  • 사용에 맞게 여러 시도가 느려질

  • 사용하여 StringBuilder입니다 고양이 끈 (예전만큼 중요하지 않음)

  • 자바 \ r에 필요하지 않습니다 -

  • 이 예외를 잡지 못할 운영체제 적절한 개행 문자를 쓸 것입니다 \ n이는 overgeneralization입니다

  • 당신은 대신에 다른 사람의 "재설정"문자열을 사용할 수있는 다른 작품 불구하고 게다가.

    File fe = new File("C:\\Users\\" + System.getProperty("user.name") + "\\desktop" + 
              "\\SearchResults.txt"); 
    String customLoca = 
         "C:\\Users\\" + System.getProperty("user.name") + "\\AppData" + "\\roaming" + 
           "\\.minecraft" + "\\mods" + "\\1.7.10"; 
    
    try (FileWriter fw = new FileWriter(fe)) 
    { 
        File dir = new File(customLoca); 
        for (File f : dir.listFiles()) 
        { 
         String contents = "Nothing Found"; 
         if (f.getName().matches("(?i).*toggle.*"))); 
         { 
          contents = new StringBuilder("Found: ") 
             .append(f.getName()) 
             .append("\n===\n").toString(); 
         } 
         fw.write(contents); 
        } 
    } 
    catch (IOException ioe) 
    { 
        ioe.printStackTrace(); 
    } 
    
+0

그러나이 코드는 똑같은 일을합니다. 디렉토리에있는 모든 파일을 나열합니까? 스크린 샷을 게시합니다 : https://gyazo.com/b47ccba9b76bb39e2f6d0bc65e54fbf7 – harry

+0

f.getName(). ("(? i) Toggle"과 일치) TOGGle, ToggLe 및 toggle과 같은 이름과 일치해야합니다. 그렇지 않으면 RegEx를 만드는 데 실수를했습니다. 이러한 경우와 일치하도록 수정하십시오. 이것은 쓸만한 단위 테스트입니다. – WillD

+0

정규식 편집 및 WFM. 다시 시도하십시오. 어떤 경우에도 "토글"이 포함 된 문자열과 일치합니다. "dToGleertY"는 일치하지만 "dToGleERTY"는 일치하지 않습니다. – WillD