Поиск подстрок в Java - PullRequest
0 голосов
/ 31 марта 2011

Я просмотрел API строк в Java 6,

и я не нашел ни одной опции для получения количества чисел, которые появляются в конкретной подстроке.

Например, я хотел бы знать, сколько раз в строке появляется «есть» или «нет» "Noisxxnotyynotxisi".

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

Спасибо.

Редактировать: я использую Java 6.

Ответы [ 3 ]

4 голосов
/ 31 марта 2011

org.apache.commons.lang.StringUtils.countMatches метод может быть предпочтительным.

2 голосов
/ 31 марта 2011

Без использования внешней библиотеки вы можете использовать String.indexOf(String str, int fromIndex); в цикле.


Обновление Этот пример полностью работает.

/**
 * @author The Elite Gentleman
 * @since 31 March 2011
 *
 */
public class Test {

    private static final String STR = "noisxxnotyynotxisi";

    public static int count(String str) {
        int count = 0;
        int index = -1;

        //if (STR.lastIndexOf(str) == -1) {
        //  return count;
        //}

        while ((index = STR.indexOf(str, index + 1)) != -1) {
            count++;
        }

        return count;
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println(Test.count("is"));
        System.out.println(Test.count("no"));
    }
}
0 голосов
/ 31 марта 2011

Вы можете сделать это, но цикл будет быстрее.

String text = "noisxxnotyynotxisinono";
String search = "no";
int count = text.split(search,-1).length-1;

System.out.println(Arrays.toString(text.split(search,-1)));
System.out.println("count= " + count);

печатает

[, isxx, tyy, txisi, , ]
count= 5

Как видите, это правильно, если текст начинается или заканчивается поискомзначение.Аргумент -1 останавливает его, удаляя завершающие разделители.

Вы можете использовать цикл с indexOf (), который более эффективен, но не так прост.

Кстати: Java 5.0 была EOL с августа2007. Возможно, пришло время взглянуть на Java 6. (хотя документы очень похожи)

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