2011-01-15 2 views
0

У меня есть коллекция, которая имеет следующую структуру ...Поиск Java Коллекцию против Строка

ArrayList<String[]> schools = new ArrayList<String[]>(); 

У меня также есть строка сказать «United Berkley»

Теперь я хочу найти " школы " для вышеупомянутой строки и возврата String [] если есть какое-либо совпадение в любом String [] массив.

У меня есть этот базовый код, но утерян, чтобы найти нужный regex для этого.

String target = this.Schools.get(s)[a]; 
if (target.matches("*")) { 
    schools.add(this.Schools.get(s)); 
} 

ответ

1

Ваша структура данных schools выглядит немного ... странно.

Вы уверены, что вы хотите не ArrayList<String>?

Если это так, то вы можете просто использовать:

if (schools.contains("United Berkley")) 
+0

Нет, это просто ArrayList , и он должен соответствовать всему, что находится внутри String [0 ... 6] – Neutralizer

+0

Ваш код дал некоторый намек на то, чтобы выполнить работу. Ура! – Neutralizer

0

Просто используйте String.equals (ваш-String) и петли через массив, чтобы соответствовать школы. Или используйте list.contains (your-String)
Но я предполагаю, что использование HashMap обеспечит лучшее время доступа для такого рода вещей.

0

Вам не нужно регулярное выражение для поиска известной строки - просто используйте target.equals ("United Berkley"). Вы можете сделать это проще для себя, убедившись, что ваши массивы String [] отсортированы - используйте Arrays.sort (...), чтобы сохранить их в порядке и использовать Arrays.binarySearch (...) для их быстрого поиска.

Я действительно сомневаюсь в компоновке ваших структур данных - это не похоже на самый естественный способ сделать то, что вы хотите. A HashMap или даже простой сортированный List будет лучше.

1

Как насчет этого?

 List<String[]> schoolsList = new ArrayList<String[]>(); 
     String [] schools = {"United Berkley","Super Standford"}; 
     schoolsList.add(schools); 
     String target = "United Berkley"; 
     for(String [] school:schoolsList){ 
      Arrays.sort(school); 
      int position = Arrays.binarySearch(school,target); 
      if(position>=0){ 
       System.out.println("Found target"); 
      }else{ 
       System.out.println("Target is not in the list"); 
      } 
     } 

отпечатки "Найдено цели".

+0

Хотя здесь, вероятно, не имеет значения, вы должны предупредить, что 'Arrays.sort' собирается изменить« школу »(возможно, этот порядок имеет значение по какой-то причине) –

+0

@Mark - Правильно. – CoolBeans

0

Вам не нужно регулярное выражение для поиска известной строки - просто используйте target.equals ("United Berkley"). Вы можете сделать это проще для себя, убедившись, что ваши массивы String [] отсортированы - используйте Arrays.sort (...), чтобы сохранить их в порядке и использовать Arrays.binarySearch (...) для их быстрого поиска.

Я действительно сомневаюсь в компоновке ваших структур данных - это не похоже на самый естественный способ сделать то, что вы хотите. A HashMap или даже простой отсортированный List представляется более уместным.

Смежные вопросы