美文网首页
15.蓝桥杯2011第八题,对输入的串进行处理

15.蓝桥杯2011第八题,对输入的串进行处理

作者: FiveZM | 来源:发表于2018-03-14 22:37 被阅读0次

    /**

    • 在实际的开发工作中,对字符串的处理是最常见的编程任务。本题目即是要求程序对用户输入的串进行处理。具体规则如下:
      1.把每个单词的首字母变为大写。
      2.把数字与字母之间用下划线字符(_)分开,使得更清晰
      3.把单词中间有多个空格的调整为1个空格。
      例如:
      用户输入:
      you and me what cpp2005program
      则程序输出:
      You And Me What Cpp_2005_program

    用户输入:
    this is a 99cat
    则程序输出:
    This Is A 99_cat
    */

    
    import java.util.Scanner;
    /**
     * 在实际的开发工作中,对字符串的处理是最常见的编程任务。本题目即是要求程序对用户输入的串进行处理。具体规则如下:
        1.把每个单词的首字母变为大写。
        2.把数字与字母之间用下划线字符(_)分开,使得更清晰
        3.把单词中间有多个空格的调整为1个空格。
     */     
    public class a8_1 {
    
        public static void main(String[] args) {
            System.out.println("请输入一串字符");
            Scanner sc = new Scanner(System.in);
            String s = sc.nextLine();
            // int N = s.length(); 这里不可以用N来做循环条件,因为这个字符串s是会改变长度的,当有多余的空格时,会删除空格,那么长度会变短
            // 我曾经用for(int i=0;i<N;i++)作循环条件,当把多余空格删除后,字符串长度减少,那么这里的N的长度还是原来的长度,所以
            // 判断条件必须是动态变化的,要用i<s.length();
            for (int i = 0; i < s.length(); i++) {
                // 当第一个字符是小写时,调用方法转为大写,因为第一个字符有点特殊,因为是第一个所以前面并没有角标了,
                // 所以调用的方法为toupper(s,0),参数并不是写i
                if (Character.isLowerCase(s.charAt(0))) {
    
                    s = toupper(s, 0);
                }
                //当i>0,就是存在i-1的元素时,判断第i个元素是否为小写字母并且在i角标的前一个字符是一个空格,那么我们就要把i元素转化为大写字母
                if (i > 0 && Character.isLowerCase(s.charAt(i)) && Character.isWhitespace(s.charAt(i - 1))) {
                    s = toupper(s, i);
                }
                //当i>0,就是存在i-1的元素,判断第i个元素是否字母,并且i的前一个字符是数字,那么我们就要在字母和数字之间加上'_'符号
                if (i > 0 && Character.isLetter(s.charAt(i)) && Character.isDigit(s.charAt(i - 1))) {
                    s = addSymbol(s, i);
                }
                //当i>0,就是存在i-1的元素,判断第i个元素是否数字,并且i的前一个字符是字母,那么我们就要在数字和字母之间加上'_'符号
                if (i > 0 && Character.isDigit(s.charAt(i)) && Character.isLetter(s.charAt(i - 1))) {
                    s = addSymbol(s, i);
                }
                //当i>0,就是存在i-1的元素,判断第i个元素是否为空格,并且i的前一个字符也是空格,那么我们就要去掉一个空格,去掉一个空格之后i前面的元素就不存在了,这时i元素的角标要
                //替代之前空格的角标,所以要i-1
                if (i > 0 && Character.isWhitespace(s.charAt(i)) && Character.isWhitespace(s.charAt(i - 1))) {
                    s = deleteWhileSpace(s, i);
                    i--;
                }
            }
            System.out.println(s);
        }
    
        /**
         * 该方法用于删除多余空格 方法思路:讲字符串分成两部分,前和后
         * 将前部分s.substring(0,i)去掉一个多余的空格,那么就取前部分的子字符串s.substring(0,i-1),
         * 再将前部分连接上后部分s.substring(i)
         */
        private static String deleteWhileSpace(String s, int i) {
            s = s.substring(0, i - 1) + s.substring(i);
            return s;
        }
    
        /**
         * 该方法用于加符号"_" 方法思路:将字符串分成两部分,前和后,在前和后直接加上一个'_' 前部分s.substring(0,i)加上"_" 再加上后部分
         * s.substring(i)
         */
        private static String addSymbol(String s, int i) {
            s = s.substring(0, i) + "_" + s.substring(i);
            return s;
        }
    
        /**
         * 该方法用于将首字母是小写的字母转换为大写 方法思路:遇到小写字母开头的,将字符串分成三份,前中后,以i为角标,那么前部分为s.substring(0,i)
         * 中部分为我们要转化的小写字母s.substring(i,i+1),将这部分调用toupperCase方法转化为大写
         * 再将后部分s.substring(i+1)连接起来 substring(int begin,int
         * end);方法会返回一个字符串,该字符串是原来字符串的索引begin~end-1,并不包括第end角标的元素
         */
        private static String toupper(String s, int i) {
            s = s.substring(0, i) + s.substring(i, i + 1).toUpperCase() + s.substring(i + 1);
            return s;
        }
    
    }
    
    

    在网上学习作的笔记,如有侵犯,立即删除
    学习来自博客http://blog.csdn.net/lhy_freshman/article/details/53314138

    相关文章

      网友评论

          本文标题:15.蓝桥杯2011第八题,对输入的串进行处理

          本文链接:https://www.haomeiwen.com/subject/xjoqqftx.html