在java中有时候我们需要计算字符串中,某个字符的个数,下面我就介绍一下,我所知道的方法:
/**
* 通过正则表达式的方式获取字符串中指定字符的个数
* @param text 指定的字符串
* @return 指定字符的个数
*/
private int pattern(String text) {
// 根据指定的字符构建正则
Pattern pattern = Pattern.compile("cs");
// 构建字符串和正则的匹配
Matcher matcher = pattern.matcher(text);
int count = 0;
// 循环依次往下匹配
while (matcher.find()){ // 如果匹配,则数量+1
count++;
}
return count;
}
/**
* 通过采用indexOf + substring + 递归的方式来获取指定字符的数量
* @param text 指定要搜索的字符串
*/
private void index(String text){
// 判断字符串中,是否包含指定的字符
int indexs = text.indexOf("cs");
if(indexs != -1){ // 指定的字符串中包含指定的字符
count++; // 数量+1
if(indexs < text.length() - 1){ // 如果包含该指定字符的位置,不是位于最后,则继续截取之后的字符串递归进行搜索
// 截取之后的字符串
text = text.substring(indexs + 1);
// 调用自身方法,递归进行搜索
index(text);
}
}
}
/**
* 通过采用substring截取指定字符在指定字符串中开始位置和结束位置之间的字符串,
* 然后通过拆分为数组,数组长度即为包含的个数
* @param text 指定要搜索的字符串
*/
private int substring(String text){
String pattern = "cs"; // 指定的需要包含的字符
int index = text.indexOf(pattern); // 查询指定字符在字符串的开始位置
int lastindex = text.lastIndexOf(pattern); // 查询指定字符在字符串的结束位置
if(index != -1){ // 包含指定的字符
if(index == lastindex){ // 如果指定字符在字符串中的开始位置就是其结束位置,则表明只有一个
return 1;
}else{
// 截取指定字符开始和结束之间的字符串
text = text.substring(index, pattern.length());
String[] ps = text.split(pattern); // 拆分为数组
/*
sds 字符串通过s拆分后的数组长度为2,第一个为空字符串""
*/
return ps.length; // 数组长度即为字符的个数
}
}else{ // 不包含指定的字符,则返回个数为0
return 0;
}
}
下面是调用:
private int count;
public static void main(String[] args) {
String text = "csagmtacsmgtcs";
Test test = new Test();
System.out.println("count: " + test.pattern(text));
test.index(text);
System.out.println("count: " + test.count);
System.out.println("count: " + test.substring(text));
}
如果你还有更多的方法,欢迎留言交流。