2013-12-11 2 views
-3

Я пишу код, который загружает ArrayList строк и проверяет, используется ли конкретное слово. Это может показаться странным, но особенностями являются:Поиск конкретных символов

Количество точек, содержащих «toot» (с любой капитализацией и допускающей нуль (0) вместо oh (o), например, «to0t», также следует учитывать); однако вы не должны считать гудок, если он содержит только «гудок» как часть другой работы, например, «tooter» недостаточно, чтобы считать гудок.

Я пробовал много вещей, но это не похоже на работу ...

Вот что я написал:

for (String toot : toots) { 
    toot.toLowerCase(); 
    toot.replace("0", "o"); 
} 
tootsWithToot = 0; 
for(int i=0; i<toots.size(); i++){ 
    if(toots.get(i).contains("toot ") || toots.contains(" toot ") 
             || toots.contains(" toot.") 
             || toots.contains(" toot") 
             || toots.contains("toot")){ 
     tootsWithToot++; 
    } 
} 
+0

Пожалуйста, более конкретно. – Rafa

+0

Он не учитывает правильные результаты, он читает слова типа «tooter» как «toot» – user3089390

ответ

2

Строки неизменны

toot.toLowerCase(); 
toot.replace("0", "o"); 

ничего не делает, вы должны назначить его обратно на гудок

toot = toot.toLowerCase(); 
toot = toot.replace("0", "o"); 
+0

Как так? Вернитесь в ArrayList? – user3089390

0

Вы можете использовать ListIterator, чтобы сделать это лучше. Продолжайте повторять и вставлять обработанную строку обратно.

 /** 
     * Preprocess the list 
     */ 
     ListIterator<String> iterator = toots.listIterator(); 
     while (iterator.hasNext()) { 
      String toot = iterator.next(); 
      iterator.remove(); 
      iterator.add(toot.toLowerCase().replace("0", "o")); 
     }     
     int tootsWithToot = 0; 
     for(int i=0; i<toots.size(); i++){ 
      if(toots.get(i).contains("toot ") || toots.contains(" toot ") 
        || toots.contains(" toot.") 
        || toots.contains(" toot") 
        || toots.contains("toot")){ 
       tootsWithToot++; 
      } 
     } 
+0

Я не знаком с ListIterator (все еще новичком), это все, что мне нужно? – user3089390

+0

Да! весь этот фрагмент кода предполагает, что toots является ArrayList , который вы упомянули в своем вопросе. Лучше всего попробовать его с вашим набором данных и посмотреть, работает ли он на вас. –

0

Попробуйте это .. надежда код объясняет ..

 int tootsWithToot = 0; 
     for (String toot : toots) { 
     toot = toot.toLowerCase().replaceAll("0", "o").replaceAll("toots", "toot"); 
     //here add anything which need to skip.. 
     if(toot.contains("toot")) 
     { 
      StringTokenizer str = new StringTokenizer(toot," "); 
      /*space is token 
      [ suppose toot. it will not pass if u want to pass toot. than 
      add in replaceAll("toot.", "toot") just make all passed strings to 'toot'] 
      */ 
      while(str.hasMoreTokens()) 
      { 
       if(str.nextToken().equalsIgnoreCase("toot")) 
       { tootsWithToot++; break;} 
      } 

     }    
    } 
    System.out.println("tot:" +tootsWithToot); 
+0

Твоя работала одна, но не для всех. Это не сработало для предложения: «hello toot hello» , который он должен был посчитать – user3089390

+0

Можете ли вы указать все входные сценарии ..? – Neha

+0

Каждая строка представляет собой отдельное сообщение «1 Toots 2 t00ts» «гудок» «будет обратно» «tooter Сигналящий» Результаты должны показать 2 как tooter и Тутинге являются не слова «toot» с вариантами O или 0 или без них. – user3089390

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