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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 小菜白白白 于 2016-9-8 20:11 编辑

题目:
从控制台接收一串字符串,完成以下要求 (共10分)
a,求出该字符串的长度并输出到控制台,如字符串长度为:X
b,将该字符串转为数组,判断该数组第一个字符和最后一个字符是否相同,不相同则交换
c,统计出数组中的每个字符出现的次数,然后自然排序后按指定格式输出到控制台,如  a=3,b=4,c=4,d=3,e=2,f=1
d,将第二步互换后的数组角标为奇数的字符用”*”号替换,然后遍历输出
e,将数组中元素重新拼接成字符串,最后截取第一个'*'到第三个'*'之间的数据输出(注意:两边都包含'*')



代码实现:
import java.util.Scanner;
import java.util.TreeMap;

public class StringZonghe {

        public static void main(String[] args) {
                Scanner sc = new Scanner(System.in);
                System.out.println("请输入一个字符串");
                String s = sc.nextLine();
                System.out.println("该字符串的长度为:" + s.length()); // a要求;求出该字符串的长度
                char[] astr = s.toCharArray();
                bMethod(astr);               
                cMethod(astr);
                dMethod(astr);
                eMehtod(astr);
        }
        public static void bMethod(char[] str) { // b要求:将该字符串转为数组,判断该数组第一个字符和最后一个字符是否相同,不相同则交换

                if (str[0] != str[str.length - 1]) { // 判断字符数组第一个字符和最后一个字符是否相等,不相等则交换
                        char temp = str[0];
                        str[0] = str[str.length - 1];
                        str[str.length - 1] = temp;
                        System.out.println("已经交换了第一个字符和最后一个字符");
                } else {
                        System.out.println("第一个和最后一个字符是一样的");
                }
        }
        private static void cMethod(char[] astr) { // c 要求:统计出数组中的每个字符出现的次数,然后自然排序后按指定格式输出到控制台,如  a=3,b=4,c=4,d=3,e=2,f=1
                TreeMap<Character, Integer> tm = new TreeMap<>(); // 用TreeMap集合来存放字符串中各个字符(key)和其个数(value)
                for (char c : astr) {
                        if (tm.containsKey(c)) { // 判断Map集和中是否有该字符,有value+1,没有则存入该字符,value为1
                                tm.put(c, tm.get(c) + 1);
                        } else {
                                tm.put(c, 1);
                        }
                }
                for (Character ch : tm.keySet()) { // 遍历map集合打印字母个数
                                                                                        // a=3,b=4,c=4,d=3,e=2,f=1
                        System.out.println(ch + "=" + tm.get(ch));
                }
                System.out.println();
        }

        private static void dMethod(char[] astr) { // d要求:将第二步互换后的数组角标为奇数的字符用”*”号替换,然后遍历输出
                for (int i = 1; i < astr.length; i = i + 2) { // 直接for循环奇数下标值为*
                        astr = '*';
                }
                System.out.println("奇数换为*后输出");
                for (char c : astr) {
                        System.out.print(c);
                }
                System.out.println();
        }

        private static void eMehtod(char[] astr) {        //e要求:将数组中元素重新拼接成字符串,最后截取第一个'*'到第三个'*'之间的数据输出(注意:两边都包含'*')
                String s1 = String.valueOf(astr);
                //System.out.println(s1);
                System.out.println("第一个'*'到第三个'*'之间的数据为:");
                int startIndex = s1.indexOf('*');                //获得第一个*的下标
                if (s1.length() > 6) {
                        int endIndex = s1.indexOf('*', 4) + 1;        //获得第三个*下标
                        System.out.println(s1.substring(startIndex, endIndex));        //截取字符串
                }
        }

}

总结:感觉要求点全部实现花费时间稍微长了点,半个小时差不多

5 个回复

倒序浏览
受教了,感觉自己会写不出来
回复 使用道具 举报
继续加油~~
回复 使用道具 举报
赞一个。。。。。
回复 使用道具 举报
多多分享
回复 使用道具 举报
目前只能做出前三个 .. 后面的就不会了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马