2013-10-01 2 views
3

나는 HashMap<Integer,String>이 있습니다. 나는지도를 조회 가능한 모든 값 와일드 카드로 문자열 모음에서 검색

public Collection<String> query(String queryStr) { 
     List<String> list = new ArrayList<String>(); 
    for (Map.Entry<String, Integer> entry : myMap.entrySet()) { 
     if (queryStr.matches(entry.getKey())) 
      list.add(entry.getKey()); 
    } 
    if (list.isEmpty()) 
     return null; 
    else 
     return list; 
} 

지도 "test","best","crest","zest","testy","tether","temper","teat","tempest"이있는 경우

을 반환하려면 다음 코드를 시도했다. te*t의 쿼리는 "teat","tempest","test"을 반환해야합니다. 'test *'의 경우 'test', 'testy'를 반환해야합니다. 그것을 구현하는 방법? 문자열에 와일드 카드 검색이 있습니까? 그리고 외부 라이브러리를 사용할 수 없습니다.

+1

'String'에는'matches' 메소드가 있습니다. 'Pattern'과'Matcher' 클래스를 사용할 수도 있습니다. –

+0

목록이 비어 있으면 null을 반환하는 이유는 무엇입니까? 빈 목록을 반환하는 것이 더 합리적입니다. – arshajii

+0

assertArrayEquals (새 Object [] { "best", "crest", "tempest", "test", "zest"}, getSortedArray (dict.query ("* est")))); 아무것도 반환하지 않습니다. – NEO

답변

6
String queryStr="te*t"; 

queryStr= queryStr.replaceAll("\\*", "\\\\w*"); 

System.out.println(query(queryStr)); 

완전한 프로그램은 다음의 문자에 대한 검색 "* w \"

public class sample { 

    static List<String> values = Arrays.asList("test","best","crest","zest","testy","tether","temper","teat","tempest"); 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 

     String queryStr="te*t"; 
     queryStr= queryStr.replaceAll("\\*", "\\\\w*"); 
     System.out.println(queryStr); 
     System.out.println(query(queryStr)); 

    } 

    public static Collection<String> query(String queryStr) { 
     List<String> list = new ArrayList<String>(); 
    for (String str : values) { 
     if (str.matches(queryStr)) 
      list.add(str); 
    } 
    if (list.isEmpty()) 
     return null; 
    else 
     return list; 
} 

} 
1

매처 : [A-ZA-Z_0-9] 당신은 모든 검색하려는 경우 charcher를 사용하면 다음을 시도해야한다.

queryStr= queryStr.replaceAll("\\*", ".*");