蓝桥杯:串的处理

分析:

题目给的字符串,只包含空格、字母、数字,所以需要只需要对拿到的字符串转换成数组。然后先将下标为0的元素拼接到新的字符串上面(先判断是否为空格,是空格就不添加,是字母就先进行大写转换,同时更新数组下标为0的字母为大写,方便后面遍历)。

        之后遍历就可以从下标1开始了,拿到当前下标的数据之后,对上一个数据进行查看,根据处理规则进行拼接。(如第一个是大写字母,第二个是数字,那么就需要添加下划线,在添加数字)

Java:

import java.util.*;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static void main(String[] args) {
        //拿数据
        Scanner scan = new Scanner(System.in);
        String str = scan.nextLine();
        scan.close();

        String s = "";
        char ch[] = str.toCharArray();
        //先放第一个数据进去,如果是空格,就不做操作
        if(ch[0]!=' '){
            //如果第一个放入的数据是字母,需要将其转换成大写字母
            if(ch[0]>='a'&&ch[0]<='z'){
                char c = (char)((int)ch[0]-32);
                //更新第一个数据(方便之后插入第二个元素的时候进行判断)
                ch[0] = c;
                //拼接到字符串里面
                s +=c;
            }else{
                //如果不是空格,不是字母,那就只能是数字
                s +=ch[0];
            }
        }
        //遍历字符串添加数据
        for(int i = 1;i<ch.length;i++){
            //如果需要插入的是字母,那么就判断前面是否有空格,如果有空格,那么就转换成大写(首字母大写)
            //如果前面是数字,就先添加下划线,不然一律添加该数据进去就行
            if(ch[i]>='a'&&ch[i]<='z'){
                //当前数据是字母
                //如果上一个元素是空格,就添加大写字母
                if(ch[i-1]==' '){
                    char c = (char)((int)ch[i]-32);
                    s +=c;
                }else if(ch[i-1]>='0'&&ch[i-1]<='9'){
                  //如果上一个数据是数字,那么要添加下划线
                    s +='_';
                    s +=ch[i];
                }else{
                    //如果前面的数据既不是空格,也不是数字,那么添加本身即可
                    s +=ch[i];
                }
            }else if(ch[i]>='0'&&ch[i]<='9'){
                //当前数据是数字,只需要判断前面是不是字母,是字母,添加下划线就好
                if( (ch[i-1]>='a' && ch[i-1]<='z')||(ch[i-1]>='A'&&ch[i-1]<='Z') ){
                     s +='_';
                    s += ch[i];
                }else{
                    //如果前面不是字母,那么直接添加进去就可以
                    s += ch[i];
                }
            }else{
                //如果既不是字母,也不是数字,那就是空格,我们只需要判断前面一个是不是空格,如果不是,就添加,如果是,就跳过这次添加
                if(ch[i-1]==' '){
                    continue;
                }else{
                    s += ch[i];
                }
            }
        }
        System.out.println(s);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值