您的位置:首页 > 编程语言 > Java开发

javaSE 字符串 练习题

qq_21539671 2019-06-01 18:11 70 查看 https://blog.csdn.net/qq_21539

    1、给定一个由数字组成的字符串,统计出每个数字出现的次数

方法一:

[code]		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]);
}

方法二:     原理是一样的

[code]        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、    统计一个字符串中数字和字母的个数 

[code]		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、给定一个字符串,判断该字符串中是否包含某个子串.如果包含,求出子串的所有出现位置和出现次数

[code]		/**第一种做法: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、给定一个长度,随机产生一个该长度的字符串,由大写,小写字母以及数字组成

[code]		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"

[code]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”     中出现的次数

解法一:

[code]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);
}

 

解法二:

[code]	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.
4000
out.println("次数:"+m);
}

 

标签: