Java Найти слово в строке - PullRequest
2 голосов
/ 15 марта 2012

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

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

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

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

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

Но счет равен 0;

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

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

Ответы [ 5 ]

6 голосов
/ 15 марта 2012

Вы не соответствуете ни одному "выражению", так что, вероятно, будет проще поиск по строке. commons-lang имеет StringUtils.countMatches(source, "yourword").

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

4 голосов
/ 15 марта 2012

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

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;
    }

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

1 голос
/ 15 марта 2012

Чтобы найти строку в Java, вы можете использовать методы String 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 голосов
/ 15 марта 2012

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

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

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

0 голосов
/ 15 марта 2012

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...