Просто для дополнительного удовольствия ......
Если необходимо подсчитать указанную подстроку (например, "hi"), и не имеет значения, где она находится во входной строке (одиночная)слово или часть слова), вы можете использовать одну строку и позволить методу String.replace () выполнить свою работу за вас, фактически удалив нужную подстроку, которую вы хотите считатьиз исходной входной строки и вычисления того, что осталось от этой входной строки (это не изменяет исходную входную строку):
String inputString = "Hi there. This is a hit in his pocket";
String subString = "hi";
int count = (inputString.length() - inputString.replace(subString, "").
length()) / subString.length())
//Display the result...
System.out.println(count);
Консоль отобразит: 3
Вы заметите, что приведенный выше код чувствителен к регистру букв и поэтому в приведенном выше примере подстрока "hi" отличается от слова "Hi" из-за прописных букв "H" поэтому " Привет " игнорируется.Если вы хотите игнорировать регистр букв при подсчете для предоставленных подстрок, вы можете использовать тот же код, но использовать в нем метод String.toLowerCase () :
String inputString = "Hi there. This is a hit in his pocket";
String subString = "hi";
int count = (inputString.length() - inputString.toLowerCase().
replace(substring.toLowerCase(), "").
length()) / substring.length())
//Display the result...
System.out.println(count);
Консоль отобразит: 4
Если, однако, указанная подстрока, которую вы хотите сосчитать, является конкретным словом (не часть другогословом) тогда становится немного сложнее. Один способ, которым вы можете сделать это, используя Pattern и Matcher Классы вместе с маленьким Регулярное выражение .Это может выглядеть примерно так:
String inputString = "Hi there. This is a hit in his pocket";
String subString = "Hi";
String regEx = "\\b" + subString + "\\b";
int count = 0; // To hold the word count
// Compile the regular expression
Pattern p = Pattern.compile(regEx);
// See if there are matches of subString within the
// input string utilizing the compiled pattern
Matcher m = p.matcher(inputString);
// Count the matches found
while (m.find()) {
count++;
}
//Display the count result...
System.out.println(count);
Консоль отобразит: 1
Опять же, приведенный выше код чувствителен к регистру букв.Другими словами, если заданная подстрока была "hi" , то отображение на консоли было бы 0 , поскольку "hi" отличается от "HiMsgstr ", который фактически содержится во входной строке как первое слово.Если вы хотите игнорировать регистр букв, тогда нужно просто преобразовать как входную строку, так и предоставленную подстроку в верхний или нижний регистр, например:
String inputString = "Hi there. This is a hit in his pocket";
String subString = "this is";
String regEx = "\\b" + subString.toLowerCase() + "\\b";
int count = 0; // To hold the word count
// Compile the regular expression
Pattern p = Pattern.compile(regEx);
// See if there are matches of subString within the
// input string utilizing the compiled pattern
Matcher m = p.matcher(inputString.toLowerCase());
// Count the matches found
while (m.find()) {
count++;
}
//Display the count result...
System.out.println(count);
Консоль отобразит: 1
Как вы можете видеть в двух последних примерах кода выше, использовалось регулярное выражение (RegEx) "\\bHi\\b"
(в коде вместо * 1074 использовалась переменная)* Привет ) и вот что это значит: