Найти целые слова без регулярных выражений - PullRequest
0 голосов
/ 20 октября 2011

Мне нужно найти целые слова в предложении, но без использования регулярных выражений. Поэтому, если бы я хотел найти слово «the» в этом предложении: «Быстрая коричневая лиса перепрыгивает через ленивую собаку», я сейчас использую:

 String text = "the, quick brown fox jumps over the lazy dog";
 String keyword = "the";

 Matcher matcher = Pattern.compile("\\b"+keyword+"\\b").matcher(text);
 Boolean contains = matcher.find();

но если бы я использовал:

Boolean contains = text.contains(keyword);

и добавьте ключевое слово с пробелом, он не найдет первое "the" в предложении, потому что у него нет пробелов и знаков препинания.

Чтобы было ясно, я создаю приложение для Android, и у меня возникают утечки памяти, и это может быть потому, что я использую регулярное выражение в ListView, поэтому оно выполняет совпадение регулярного выражения с числом X раз, в зависимости от элементов списка.

Ответы [ 6 ]

1 голос
/ 20 октября 2011

Что вы делаете, это поиск "the".Затем для каждого совпадения вы проверяете, являются ли окружающие символы пробелом (или пунктуацией) или совпадение находится в начале / конце строки соответственно.

1 голос
/ 20 октября 2011

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

Затем вы можете создать собственный метод поиска. В противном случае другие решения, использующие String.contains() или String.indexOf(), будут квалифицированы.

0 голосов
/ 20 октября 2011

В комментариях к классу StringTokenizer.class:

StringTokenizer - это устаревший класс, который сохраняется из соображений совместимости, хотя его использование не рекомендуется в новом коде.Любой, кто ищет эту функцию, рекомендует вместо этого использовать метод split String или пакет java.util.regex.

В следующем примере показано, как метод String.split можно использовать для разбиения строки на еебазовые токены:

String[] result = "this is a test".split("\\s");
for (int x=0; x<result.length; x++)
    System.out.println(result[x]);

выводит следующий вывод:

this
is
a
test

Итерация по полученному массиву строк, проверка на равенство и ведение счета.

for (String s : result)
{
 count++;
}

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

0 голосов
/ 20 октября 2011

Просто перебирайте символы и сохраняйте их в буфере символов. Каждый раз, когда вы видите пробелы, очищайте буфер в список слов и продолжайте, пока не дойдете до конца.

0 голосов
/ 20 октября 2011
public int findWholeWorld(final String text, final String searchString) {
    return (" " + text + " ").indexOf(" " + searchString + " ");
}

Это даст вам индекс первого вхождения слова «the» или -1, если слово «the» не существует.

0 голосов
/ 20 октября 2011

Разделите строку на пробел, а затем посмотрите, содержит ли полученный массив ваше слово.

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