美文网首页
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第八题,对输入的串进行处理

    /** 在实际的开发工作中,对字符串的处理是最常见的编程任务。本题目即是要求程序对用户输入的串进行处理。具体规则如...

  • 蓝桥杯17年字母组串

    标题:字母组串 代码填空题:蓝桥杯的代码填空题,一般一个分号代表一行 假设我们输入1个A,1个B和1个C 并且需要...

  • [蓝桥杯]字符串的输入输出处理

    问题 1094: 字符串的输入输出处理 题目描述 字符串的输入输出处理。 输入 第一行是一个正整数N,最大为100...

  • 字符串合并处理:C++ bitset库和stoi()函数实践

    题目描述按照指定规则对输入的字符串进行处理。详细描述:将输入的两个字符串合并。对合并后的字符串进行排序,要求为:下...

  • 管道--模拟评测系统

    被骗去当蓝桥杯的炮灰,但是对蓝桥杯的练习评测系统很感兴趣,我们的程序有输入函数,评测系统也能判断出来。最近有个朋友...

  • [蓝桥杯]字符串编辑

    问题 1621: [蓝桥杯][算法训练VIP]字符串编辑 题目描述 从键盘输入一个字符串(长度< =40个字符),...

  • 蓝桥杯试题——FJ的字符串

    title: 蓝桥杯试题——FJ的字符串date: 2019年2月17日20:33:05tags: 蓝桥杯试题 算...

  • 16.蓝桥杯2011第十题

    *A、B、C、D、E、F、G、H、I、J 共10名学生有可能参加本次计算机竞赛,也可能不参加。因为某种原因,他们是...

  • 蓝桥杯真题题解收藏

    收藏一些在网上发现的,觉得写的不错的蓝桥杯真题题解内容,给学生练习备战蓝桥杯时所用。2020蓝桥杯省赛第二场C组_...

  • [蓝桥杯]正则问题

    问题 1887: [蓝桥杯][2017年第八届真题]正则问题 题目描述 考虑一种简单的正则表达式:只由 x ( )...

网友评论

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

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