2016-10-06 31 views
2

我使用Geocoder獲取地址。有時我會得到兩次城市或郵政編碼。我想刪除這些重複的單詞以使地址更易於接受。有沒有辦法做到這一點?我搜索刪除字符串中的重複單詞,但只有一個很好的result但它沒有在我的情況。從如果我取我的當前地址下面的代碼,我得到的結果是:刪除地址中的重複單詞

Street no 0360 
DH Block(Newtown), Action Area I, Newtown 
New Town, West Bengal 700156 
New Town 
700156 
India 

代碼

Geocoder geocoder = new Geocoder(this, Locale.getDefault()); 

     List<Address> addresses = null; 
     String result = null; 

     try { 

      addresses = geocoder.getFromLocation(location.getLatitude(),location.getLongitude(),1); 

     } catch (IOException ioException) { 
      errorMessage = getString(R.string.service_not_available); 
      Log.e(TAG, errorMessage, ioException); 
     } catch (IllegalArgumentException illegalArgumentException) { 
      errorMessage = getString(R.string.invalid_lat_long_used); 
      Log.e(TAG, errorMessage + ". " +"Latitude = " + location.getLatitude() +", Longitude = " + location.getLongitude(), illegalArgumentException); 
     } 

     if (addresses == null || addresses.size() == 0) { 
      if (errorMessage.isEmpty()) { 
       errorMessage = getString(R.string.no_address_found); 
       Log.e(TAG, errorMessage); 
      } 
      deliverResultToReceiver(AppUtils.LocationConstants.FAILURE_RESULT, errorMessage, null); 
     } else { 
      Address address = addresses.get(0); 

      StringBuilder sb = new StringBuilder(); 
      for (int i = 0; i < address.getMaxAddressLineIndex(); i++) { 
       sb.append(address.getAddressLine(i)).append(" "); 
      } 
      sb.append(address.getLocality()).append(" "); 
      sb.append(address.getPostalCode()).append(" "); 
      sb.append(address.getCountryName()); 
      result = sb.toString(); 

     }  
+0

請解釋爲何鏈接的問題無效。這正是如何刪除重複並保持順序。將所有元素添加到LinkedHashSet –

+0

我試過但我仍然得到相同的結果。 – CodeAssasins

+0

你不清楚你試過了什麼。此外,它唯一應該處理的價值是「DH Block(Newtown),Action Area I,Newtown」,但只有當你在空格分割並在Block之後加一個時,然後去掉括號。換句話說,我認爲你不知道如何使這個答案適應你的代碼。你的預期產出是多少? –

回答

0

//調用方法一樣

String Address = "Street no 0360 DH Block(Newtown), Action Area I, NewTown NewTown, West Bengal 700156 NewTown 700156 India"; 

    String output = RemoveDuplicateWords(Address.toLowerCase()); 

//方法刪除重複的話

public String RemoveDuplicateWords(String word){ 
     int i=0,j=0,n; 
     word = word.replaceAll(",", ""); 
     word = word.replace("(", " "); 
     word = word.replace(")", " "); 
     String array_word[]; 
     String final_string=""; 
     array_word=word.split(" "); 
     n=array_word.length; 


     for(i=0;i<n;i++){ 
      for(j=i+1;j<n;j++){ 
       if(array_word[i].equalsIgnoreCase(array_word[j]) && !array_word[i].equalsIgnoreCase("**")){ 
        array_word[j]="**"; 
       } 
      } 
     } 


     for(i=0;i<n;i++){ 
      if(array_word[i]!="**") 
      { 
       final_string=final_string+array_word[i]+" "; 
      } 
     } 

     return final_string; 
    } 
+0

這可以使用Set和StringBuilder進行優化 –

0

您的方式解析你的地址並不是非常健壯。您可以通過使用address validation服務修復重複問題。它將匹配輸入到實際地址數據庫中的條目,這將刪除重複的地址和地址。我想推薦SmartyStreets。試用demo page上的搜索詞。

公平披露:我爲SmartyStreets工作。