黑马程序员技术交流社区

标题: 论坛上的一个点招题实现 [打印本页]

作者: 小菜白白白    时间: 2016-9-8 20:10
标题: 论坛上的一个点招题实现
本帖最后由 小菜白白白 于 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));        //截取字符串
                }
        }

}

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

作者: 冷冷冷白    时间: 2016-9-8 20:41
受教了,感觉自己会写不出来
作者: xiguapi    时间: 2016-9-8 21:01
继续加油~~
作者: 细听风语为梧桐    时间: 2016-9-8 21:06
赞一个。。。。。
作者: taozhihui    时间: 2016-9-8 21:52
多多分享
作者: xianghui0521    时间: 2016-9-9 00:18
目前只能做出前三个 .. 后面的就不会了




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