A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李春林 中级黑马   /  2016-10-9 10:39  /  1128 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

String类综合题型
[Java] 纯文本查看 复制代码
package com.heima.test;

import java.util.Map.Entry;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeMap;

public class Test1 {

	/**
	 *从控制台接收一串字符串,完成以下要求 (共10分)
		a,求出该字符串的长度并输出到控制台,如字符串长度为:X
		b,将该字符串转为数组(toCharArray),判断(if)该数组第一个字符(arr[0])和最后一个字符(arr[arr.length-1])是否相同,不相同则交换(想第三方变量)
		c,统计出数组中的每个字符出现的次数,然后自然排序(Tree树结构)后按指定格式输出到控制台,如a=3,b=4,c=5
		d,将第二步互换后的数组角标为奇数的字符用”*”号替换,然后遍历输出
		e,将数组中元素重新拼接成字符串,最后截取第一个'*'到第三个'*'之间的数据输出(注意:两边都包含'*')
		例如输入字符串:aaabbbbccccdddeef 打印台输出效果如下:
	 */
	public static void main(String[] args) {
		//键盘录入一串字符串:
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入一段字符串:");
		String line = sc.nextLine();
		
		//a,求出该字符串的长度并输出到控制台,如字符串长度为:X
		System.out.println("该字符串的长度为:" + line.length());
		
		//b,将该字符串转为数组,判断该数组第一个字符和最后一个字符是否相同,不相同则交换
		char[] arr = line.toCharArray();
		if(arr[0] != arr[arr.length-1]){
			char temp = arr[0];
			arr[0] = arr[arr.length-1];
			arr[arr.length-1] = temp;
		}
		
		/*String change = "";
		for(char c : arr){
			change = change + c;
		}
		System.out.println("交换前的数据为:"+line +",交换后的数据为:"+change);*/
		
		//c,统计出每个字符出现的次数,然后按指定格式输出到控制台,如a=3,b=4,c=5
		TreeMap<Character,Integer> map = new TreeMap<>();
		for (int i = 0; i < line.length(); i++) {
			char ch = line.charAt(i);
			map.put(ch, map.containsKey(ch) ? map.get(ch) +1 : 1);
		}
		
		//遍历输出
		Set<Entry<Character, Integer>> entrySet = map.entrySet();
		StringBuilder sb = new StringBuilder();
		for(Entry<Character, Integer> en : entrySet){
			Character key = en.getKey();
			Integer value = en.getValue();
			sb.append(key).append("=").append(value).append(",");
		}
		//StringBuffer subString(0,5)
		System.out.println("每个字符出现的次数为:"+sb.substring(0, sb.length()-1));
		
		//d,将第二步互换后的数组角标为奇数的字符用”*”号替换,然后重新拼接成字符串,在控制台输出替换后的字符串
		for (int i = 0; i < arr.length; i++) {
			if(i % 2 != 0){
				arr[i] = '*';
			}
		}
		String s = "";
		for(char c :arr){
			s += c;
		}
		System.out.println("被替换后的数组元素为:"+s);
		//e,将数组中元素重新拼接成字符串,最后截取第一个'*'到第三个'*'之间的数据输出(注意:两边都包含'*') aaabbbcccdddeeeff
		System.out.println("第一个*到第三个*之间的数据为:"+s.substring(1,6));
	}
}


1 个回复

倒序浏览
虽然看不懂,但是点个赞吧
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马