只是为了增加乐趣......
如果要计算提供的子字符串(即:"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())
System.out.println(count);
控制台将显示:3
您会注意到上述代码区分大小写,因此在上面的示例中,子字符串"hi"与单词"Hi"不同,因为大写字母"H",所以忽略了"Hi"。如果要在计算提供的子字符串时忽略大小写,则可以使用相同的代码,但在其中利用 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())
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;
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(inputString);
while (m.find()) {
count++;
}
System.out.println(count);
控制台将显示:1
同样,上述代码区分大小写。换句话说,如果提供的子字符串是"hi",则控制台中的显示将是0,因为"hi"与包含在输入字符串中的第一个单词"Hi"不同。如果您想忽略大小写,则只需将输入字符串和提供的子字符串转换为全大写或全小写即可,例如:
String inputString = "Hi there. This is a hit in his pocket";
String subString = "this is";
String regEx = "\\b" + subString.toLowerCase() + "\\b";
int count = 0;
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(inputString.toLowerCase());
while (m.find()) {
count++;
}
System.out.println(count);
控制台将显示:1
正如您在上面的两个最新代码示例中所看到的,正则表达式(RegEx)"\\bHi\\b"
被使用了(在代码中,一个变量被用来代替Hi),这是它的含义:
![enter image description here](https://istack.dev59.com/uUJYh.webp)