javaSE 字符串 练习题

6 篇文章 0 订阅
5 篇文章 0 订阅

    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);
	}

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值