Java Ищем уточняющие c буквы в строке - PullRequest
0 голосов
/ 07 августа 2020

Мне было интересно, как перебрать строку и проверить, сколько выходит привет

Например, если строка «привет», счет должен вывести 2.

Это что у меня есть до сих пор

public static int countHi(String str) {
    int counter = 0;
    for (int i = 0; i < str.length(); i++) {
        if (str.substring(i, i + 1) == "h") {
            if (str.substring(i, i + 1) == "i") {
                counter = counter + 1;
            }
        }
    }
    return counter;
}

public static void main(String[] args) {
    String str = "hihi";
    int i = countHi(str);
    System.out.println("number of hi = " + i);
}

Ответы [ 3 ]

1 голос
/ 07 августа 2020

Вы сравниваете экземпляры (например, String) с .equals (не ==). Однако здесь вы можете использовать == с String.charAt(int). Кроме того, я бы начал со второго символа и сравнил бы символ в текущем индексе с i и предыдущий индекс с h. Например,

public static int countHi(String str) {
    int counter = 0;
    for (int i = 1; i < str.length(); i++) {
        if (str.charAt(i - 1) == 'h' && str.charAt(i) == 'i') {
            counter++;
        }
    }
    return counter;
}

В качестве альтернативы сравните символ в текущем индексе с h и символ в следующем индексе с i (но теперь вам нужно прекратить повторение символа раньше). Например,

public static int countHi(String str) {
    int counter = 0;
    for (int i = 0; i < str.length() - 1; i++) {
        if (str.charAt(i) == 'h' && str.charAt(i + 1) == 'i') {
            counter++;
        }
    }
    return counter;
}
0 голосов
/ 07 августа 2020

Для компактности и удобочитаемости, возможно:

int count = 0;
Matcher matcher = Pattern.compile(“hi”).matcher(string)
while (matcher.find()) {
    count++;
}

Этот подход будет работать для любого шаблона регулярного выражения, хотя он не будет самым эффективным.

0 голосов
/ 07 августа 2020

Вот простой способ:

public static int countHi(String str) {
    return split(str, -1).length - 1;
}

Обратите внимание, что вы должны передать -1 в качестве второго параметра split(); без него конечные пробелы будут удалены из результата.

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