Поиск одной строки в другой строке - PullRequest
2 голосов
/ 31 мая 2010

Допустим, у меня есть таблица строк, в которой есть несколько строк (например, мама, папа, сын), и теперь в этой таблице строк я хочу найти каждое слово, которое содержит строку "th", например.

Как мне это сделать? Метод string.equals (string) здесь не поможет.

Ответы [ 3 ]

11 голосов
/ 31 мая 2010

Следующий фрагмент должен быть поучительным:

String[] tests = {
        "father",
        "mammoth",
        "thumb",
        "xxx",
};

String fmt = "%8s%12s%12s%12s%12s%n";
System.out.format(fmt,
    "String", "startsWith", "endsWith", "contains", "indexOf");

for (String test : tests) {
    System.out.format(fmt, test,
        test.startsWith("th"),
        test.endsWith("th"),
        test.contains("th"),
        test.indexOf("th")
    );
}

Это печатает:

  String  startsWith    endsWith    contains     indexOf
  father       false       false        true           2
 mammoth       false        true        true           5
   thumb        true       false        true           0
     xxx       false       false       false          -1

Строковые ссылки API

  • boolean startsWith(String prefix)
    • Проверяет, начинается ли эта строка с указанного префикса.
  • boolean endsWith(String suffix)
    • Проверяет, заканчивается ли эта строка указанным суффиксом.
  • boolean contains(CharSequence s)
    • Возвращает true тогда и только тогда, когда эта строка содержит указанную последовательность значений символов.
  • int indexOf(String s)
    • Возвращает индекс в этой строке первого вхождения указанной подстроки.
      • -1 если нет вхождения

Поиск индексов всех вхождений

Вот пример использования indexOf и lastIndexOf с аргументом startingFrom для поиска всех вхождений подстроки в большей строке, вперед и назад.

String text = "012ab567ab0123ab";

// finding all occurrences forward
for (int i = -1; (i = text.indexOf("ab", i+1)) != -1; ) {
    System.out.println(i);
} // prints "3", "8", "14"      

// finding all occurrences backward     
for (int i = text.length(); (i = text.lastIndexOf("ab", i-1)) != -1; ) {
    System.out.println(i);
} // prints "14", "8", "3"
8 голосов
/ 31 мая 2010

Использование содержит или indexOf методов, в зависимости от того, нужна ли вам позиция.

1 голос
/ 31 мая 2010

Если вы знаете, как искать String внутри другого String, вы знаете, как выполнить цикл в таблице String. Вы можете использовать indexOf, как предложил кто-то другой, или вы можете использовать regex, если это более сложно.

...