1、给定一个由数字组成的字符串,统计出每个数字出现的次数
方法一:
String string = "12524983436574843487535793";
int[] c = new int[10];
for (int i = 0; i < string.length(); i++){
char c1 = string.charAt(i); //48-57
int a = c1-48; // 类型转换 char 类型的1 转化成int值为49
c[a]++;
}
for (int i = 0; i < c.length; i++){
System.out.println(i+" 出现的次数: "+c[i]);
}
方法二: 原理是一样的
String string = "12524983436574843487535793";
char arr[] = string.toCharArray();
int arr1[] = new int[10];
for(int i=0;i<arr.length;i++) {
int a=(int)arr[i];
int j=a-48;
arr1[j]++;
}
for(int i=0;i<arr1.length;i++) {
System.out.println(String.format("%s出现的次数:%d",i,arr1[i]));
}
2、 统计一个字符串中数字和字母的个数
String str = "122345ht3jsu8dkd7ldfdk5~=-09';";
int number=0;
int letter=0;
int other = 0;
for(int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
int a = 0+c;//a~z 97~122 A~Z 65~90
if( a >= 97 && a <= 122 || a >= 65 && a <= 90 ) {
letter ++ ;
}else if ( a >= 48 && a <= 57 ) {//char 1~9 int 48~57
number ++ ;
}else {//其他字符
other ++ ;
}
}
System.out.println(String.format("数字个数:%s",number));
System.out.println(String.format("字母个数:%s",letter));
System.out.println(String.format("其他字符:%s",other));
3、给定一个字符串,判断该字符串中是否包含某个子串.如果包含,求出子串的所有出现位置和出现次数
/**第一种做法:indexOf的妙用*/
String str = "ruydoruyfhlfiruyokngredcxruy";
String str1="ruy";
int stat = 0;
int count0=0;
while (true){
int i = str.indexOf(str1,stat);//不存在返回-1
if (i==-1){
break;
}
count0++;
System.out.println(String.format("第%s次的位置:%s",count0,i));
stat = i+str1.length();
}
System.out.println(String.format("共出现%d次", count0));
/** 第二种做法:(利用StringBuffer或StringBuilder 的append()方法及charAt()方法) */
str = "ruydoruyfhlfiruyokngredcxruy";
str1="ruy";
StringBuffer buf = new StringBuffer();
int count=0;
for(int i=0;i<str.length();i++) {
buf.append(str.charAt(i));
if(buf.toString().contains(str1)) {
count++;
buf.delete(0,buf.length());
System.out.println(String.format("第%s次的位置:%s",count,(i-str1.length()+1)));
}
}
System.out.println(String.format("共出现了%s次",count));
/**第三种做法 :(本质上与第二中一样)(体会下String与char之间的关系)*/
str = "ruydoruyfhlfiruyokngredcxruy";
str1="ruy";
StringBuffer buf1 = new StringBuffer();
char[] cArr = str.toCharArray();
int count2=0;
for(int i=0;i<cArr.length;i++) {
buf1.append(cArr[i]);
if(buf1.toString().contains(str1)) {
count2++;
buf1.delete(0, buf1.length());
System.out.println(String.format("第%s次的位置:%s",count2,(i-str1.length()+1)));
}
}
System.out.println(String.format("共出现了%s次",count2));
4、给定一个长度,随机产生一个该长度的字符串,由大写,小写字母以及数字组成
int num=5;
char[] c = new char[5];
Random r = new Random();
for(int i=0;i<5;i++) {
int m = r.nextInt(62);//9个数字,26个大写,26个小写 51个数字,不包含62
if(m>=0&&m<=25) {//小写字母26个
m+=65;//0=>65,1=>66
}else if(m>=26&&m<=51) {//26个大写 97-26=71
m+=71;
}else {//9个数字 52-61
m-=4;//char 0=>int 48 char1=>int 49
}
c[i]=(char)m;
}
System.out.println(c);
5、获取两个字符串中最大相同子串(可能多个)。比如: str1 = "abcwerthelloyuiodef“;str2 = "cvhellobnm"
public void max() {
String str1 = "abcwerthelloyuiodef";
String str2 = "ccwertvhellobnmiodef";
String s3 = "";
String s4 = "";
List<String> list = new LinkedList<>();
for(int i=0; i < str2.length(); i++) {
char s5 = str2.charAt(i);
s3+=s5;
if(str1.contains(s3)) {
if(s3.length() > s4.length()) {
s4=s3;
list.clear();
list.add(s4);
}else if(s3.length() == s4.length()) {
list.add(s3);
}
if(i<str2.length()-1) {
if(!str1.contains(s3 + str2.charAt(i+1))) {
s3="";
}
}
}else {
s3="";
}
}
System.out.println("最大:"+list);
}
6.获取一个字符串在另一个字符串中出现的次数。 比如:获取“ ab”在 “abkkcadkabkebfkabkskab” 中出现的次数
解法一:
public void times() {
String s = "abkkcadkabkebfkabkskab";
String s0 = "ab";
int m=0;
while(s.indexOf(s0)!=-1) {
s=s.substring(s.indexOf(s0)+s0.length());
m++;
}
System.out.println("次数:"+m);
}
解法二:
public void times() {
String s = "abkkcadkabkebfkabkskab";
String s1="";
int m=0;
for(int i=0;i<s.length();i++) {
s1+=s.charAt(i);
if(s1.contains("ab")) {
m++;
s1="";
}
}
System.out.println("次数:"+m);
}