2014-06-24 57 views
0

我需要改进我的系统搜索字符串EditText。目前,我有这样的例子:改进EditText中的搜索字符串

要搜索的字符串 - >普拉多博物馆

如果我搜索这些字符串被发现:

  • 国立博物馆
  • 普拉多

如果我搜索这个字符串,它找不到:

  • 普拉多博物馆

如何调试我的代码找到Museo del Prado?感谢

@Override 
public void afterTextChanged(Editable s) { 

    filterArray.clear(); 
    searchString = edittextBuscar.getText().toString().trim(); 

    String cadenaBuscar = reemplazarCaracteres(searchString); 

    if (items.size() > 0 && cadenaBuscar.length() > 0) { 

     for (Items name : items) { 

      String cadenaItem = reemplazarCaracteres(name.getNombre()); 

      if (cadenaItem.toLowerCase(Locale.getDefault()).contains(cadenaBuscar.toLowerCase(Locale.getDefault()))) { 

       filterArray.add(name); 
      } 
     } 
     setAdapterToListview(filterArray); 
    } else { 
     filterArray.clear(); 
     setAdapterToListview(items); 
    } 
} 

private static String reemplazarCaracteres(String cadena) { 

    String original = "áàéèíìóòúùüÁÀÉÈÍÌÓÒÚÙÜñÑçÇ"; 
    String ascii = "aaeeiioouuuAAEEIIOOUUUnNcC"; 

    String cadenaLimpia = cadena; 

    for (int i = 0; i < original.length(); i++) { 

     cadenaLimpia = cadenaLimpia.replace(original.charAt(i), ascii.charAt(i)); 
    } 
    return cadenaLimpia; 
} 
+0

我想你应该打破你的搜索字符串成独立的实体。搜索Museo,然后搜索del ... Prado。但是,一个字符串意味着你必须匹配所有的东西 – Martin

回答

0

普拉多博物馆不包含普拉多博物馆

您需要搜索所有的子字符串

String reference = "Museo Nacional del Prado"; 
String toSearch = "Museo del Prado"; 

StringTokenizer strk = new StringTokenizer(toSearch, " ", false); 
boolean matchingResult = true; 
while(strk.hasMoreTokens()){ 
    if(reference.contains(strk.nextToken()) == false){ 
     matchingResult = false; 
     break; 
    } 
} 
System.out.println(matchingResult); 

搜索“普拉多”,将然后返回true

您可以添加此方法:

private boolean match(String reference, String toSearch){ 
    StringTokenizer strk = new StringTokenizer(toSearch, " ", false); 
    boolean matchingResult = true; 
    while(strk.hasMoreTokens()){ 
     if(reference.contains(strk.nextToken()) == false){ 
     matchingResult = false; 
     break; 
    } 
    return matchingResult; 
} 

,并调用它是这样的:

​​
+0

许多非常感谢。你救我。你的代码是完美的。 – user4152