黑马程序员技术交流社区

标题: String类综合题型 [打印本页]

作者: 李春林    时间: 2016-10-9 10:39
标题: String类综合题型
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 = '*';
                        }
                }
                String s = "";
                for(char c :arr){
                        s += c;
                }
                System.out.println("被替换后的数组元素为:"+s);
                //e,将数组中元素重新拼接成字符串,最后截取第一个'*'到第三个'*'之间的数据输出(注意:两边都包含'*') aaabbbcccdddeeeff
                System.out.println("第一个*到第三个*之间的数据为:"+s.substring(1,6));
        }
}



作者: q哇哈哈qq    时间: 2016-10-9 12:53
虽然看不懂,但是点个赞吧





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2