2012-03-14 4 views
2

Мне нужно найти слово в исходном HTML-коде. Также мне нужно посчитать появление. Я пытаюсь использовать регулярное выражение. Но он говорит, что найдено 0 совпадений.Java Найти слово в строке

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

Мне нужно найти появление слова «hsw.ads» в исходном коде HTML.

Я предпринял следующие шаги.

int count = 0; 
{ 
    Pattern p = Pattern.compile(".*(hsw.ads).*"); 
    Matcher m = p.matcher(SourceCode); 
    while(m.find())count++; 
} 

Но кол-во 0;

Пожалуйста, дайте мне знать ваши решения.

спасибо. Помощь Искатель

+0

Удалите подстановочные знаки с начала и конца шаблона и повторите попытку. –

ответ

4

Вы должны попробовать это.

private int getWordCount(String word,String source){ 
     int count = 0; 
     { 
      Pattern p = Pattern.compile(word); 
      Matcher m = p.matcher(source); 
      while(m.find()) count++; 
     } 
     return count; 
    } 

Передайте слово (не шаблон), которое вы хотите найти в строке.

+0

Спасибо, @Mayur, это то, что я искал. –

6

Вы не соответствуете ни одному количеству слов "'выражение", так что, возможно, простой поиск строк будет лучше. commons-lang имеет StringUtils.countMatches(source, "yourword").

Если вы не хотите включать commons-lang, вы можете написать это вручную. Просто используйте source.indexOf("yourword", x) несколько раз, каждый раз поставляет большее значение x (который является смещение), до тех пор, пока он получает -1

+0

Привет @Bozho. Спасибо за ответ. Могу ли я узнать пакет для импорта для использования StringUtils? –

+0

Я добавил ссылку на commons-lang.вам нужно добавить jar к вам classpath. Тогда FQN - org.apache.commons.lang3.StringUtils – Bozho

+0

Хорошо .. Спасибо .. Я уже включил commons-lang в свой пакет и другие пакеты тоже. Вот почему Eclipse IDE предлагает несколько вариантов для этого класса, поэтому я спросил вас. –

1

Чтобы найти строку в Java вы можете использовать методы строковых indexOf, который говорит вам, индекс первого символ строки, которую вы искали. Чтобы найти все из них и подсчитать их, вы можете сделать это (может быть, более быстрый способ, но это должно работать). Я бы рекомендовал использовать метод StringUtils CountMatches.

String temp = string; //Copy to save the string 
int count = 0; 
String a = "hsw.ads"; 
int i = 0; 

while(temp.indexOf(a, i) != -1) { 
    count++; 
    i = temp.indexof(a, i) + a.length() + 1; 
} 
+0

лучше использовать 'indexOf (a, i)' где 'i' увеличивается каждый раз – Bozho

+0

@Bizho хорошая вещь, я исправлю это. – twain249

+0

'temp = string' кажется ненужным. Почему бы просто не ссылаться прямо на 'string'? –

0

StringUtils.countMatches (Исходник «hsw.ads») должны работать, однако придерживаться подхода у вас есть выше (что справедливо), я рекомендовал бы несколько вещей: 1. Как Иоанн Хаагер упомянул, удалите открытие/закрытие. * Поможет, потому что вы ищете эту точную подстроку. 2. Вы хотите избежать «.». потому что вы ищете литерал ». а не подстановочный знак 3. Я бы сделал этот шаблон постоянным и повторно использовал его, а не повторно создавал его каждый раз.

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

0

Ваш код и регулярное выражение действительны. Вам не нужно включать. * В начале и в конце вашего регулярного выражения. Например:

String t = "hsw.ads hsw.ads hsw.ads"; 
int count = 0; 
Matcher m = Pattern.compile("hsw\\.ads").matcher(t); 
while (m.find()){ count++; } 

В этом случае отсчет 3. И еще одна вещь, если вы собираетесь использовать регулярное выражение, если вы действительно хотите, чтобы специально искать «» период между hsw и ads, вам нужно сбежать от него.

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