2015-07-21 3 views
2

в моем андроида приложения я попытался сравнить строку с ArrayList проверить это мой код нижеСтрока поиска с Arraylist в андроида

ArrayList<String> namelist = new ArrayList<String>(); 
     ArrayList<String> withoutcomma = new ArrayList<String>(); 

     namelist.add("chennai , In"); 
     namelist.add("mumbai, In"); 
     namelist.add("Usak,TR"); 
     namelist.add("Ushuaia,AR"); 
     namelist.add("San Francisco,US"); 

     for (int i = 0; i < namelist.size(); i++) { 
      String[] value = namelist.get(i).split("\\s*,\\s*"); 
      withoutcomma.add(value[0]); 
      withoutcomma.add(value[1]); 
     } 

     String name = "i want to go chennai to mumbai"; 
     String[] splitname = name.split(" "); 

     for (int i = 0; i < splitname.length; i++) { 
      if (withoutcomma.contains(splitname[i])) { 
       System.out.println(splitname[i]); 
      } 
     } 

возвращает правильный вывод

chennai 
mumbai 

, но не в состоянии получить значение для san fransisco, потому что пустое пространство, я полностью поражен, даже я использовал Pattern и совпадения, но не смог обработать пробел

Может кто-нибудь помочь?

+0

Почему вы не просто '.split ("");' – Kelo

+0

Не возможно с этим сценарием. Потому что вы не можете получить Сан-Франциско, когда разделите имя. – SANAT

ответ

2

Вместо разделения на пробел, вы можете искать значения вашего массива withoutcomma в String name.

for (String str : withoutcomma) 
{ 
    if (name.contains(str)) 
    { 
     System.out.println("Found city: " + str + " at position: " + name.indexOf(str)); 
    } 
} 

И если порядок вопросов городов, вы можете сохранить индекс стоимости, который был найден в String name с int idx = name.indexOf(str).

+0

Большое спасибо – Madhu

+0

Я столкнулся с еще одной проблемой, когда я использую этот код, он возвращает всю строку, которая соответствует всем городам: мой список аргралов, имеющий как сан-франциско, так и сан, тогда этот код возвращает и сан и сан франсиско, где нам нужен только san fransisco – Madhu

+0

Вы можете использовать break; и продолжать; контролировать цикл for? Как добавить перерыв; в if-statement, когда вы хотите остановиться при первом совпадении? – milez

1

вы можете использовать накладку(), чтобы опустить место в Сан-Франциско,

Смените

String[] value = namelist.get(i).split("\\s*,\\s*"); 

в

String[] value = namelist.get(i).trim().split("\\s*,\\s*"); 
+0

его не работает, в любом случае спасибо за ваш ответ – Madhu

2

Split слова в запятых, а также в любых помещениях. Итак, когда вы получаете имя многословного места, храните его в массиве, а затем используйте его для сравнения. работает на меня.

Используйте это:

ArrayList<String> namelist = new ArrayList<String>(); 
    ArrayList<String> withoutcomma = new ArrayList<String>(); 

    namelist.add("chennai , In"); 
    namelist.add("mumbai, In"); 
    namelist.add("Usak,TR"); 
    namelist.add("Ushuaia,AR"); 
    namelist.add("San Francisco,US"); 

    for (int i = 0; i < namelist.size(); i++) { 
     String[] value = namelist.get(i).split("[(\\s*,\\s*)\\s]"); 
     for(String word : value) { 
      withoutcomma.add(word); 
     } 
    } 

    String name = "i want to go San Francisco to mumbai"; 
    String[] splitname = name.split(" "); 

    for (int i = 0; i < splitname.length; i++) { 
     if (withoutcomma.contains(splitname[i])) { 
      System.out.println(splitname[i]); 
     } 
    } 
+0

Нет, он дает мне отдельный выход – Madhu