每日一题——【分割字符串】

一、题目描述

给定一个非空字符串Str,字符串中间可能含有数字0,对于数字0,则替换成符号”-“,由此生成多个由”-“分割的子串。对于新组成的每一个子串,则将这个子串的所有字母转换为小写字母;反之,如果它含有的大写字母比小写字母多,则将这个子串的所有字母转换为大写字母;大小写字母的数量相等时,不做转换。
示例:
12Abc0deAbc03aA
输出
12Abc-deabc-3aA

二、代码与测试

1.参考代码

代码如下(示例):

Scanner sc = new Scanner(System.in);
String source = sc.nextLine();
String[] split = source.split("0");
for (int i = 0; i < split.length; i++) {
    String s1 = split[i].replaceAll("[1-9]", "");
    String s2 = s1.replaceAll("[a-z]", "");
    if (s2.length() > s1.length() / 2) {
        split[i] = split[i].toUpperCase();
    } else if (s2.length() < s1.length() / 2) {
        split[i] = split[i].toLowerCase();
    }
}
for (int i = 0; i < split.length; i++) {
    if (i == 0) {
        System.out.print(split[i]);
    } else {
        System.out.print("-" + split[i]);
    }
}

2.边界测试

代码如下(示例):

12Abc0deAbc03aA
12Abc-deabc-3aA
----------------------
643Ahff03fdsGDe0fdj5G
643ahff-3fdsgde-fdj5g
----------------------
Abhfd0432530aFJ8Kd0fD6
abhfd-43253-AFJ8KD-fD6
----------------------
A8B9c6k0p08sMFL0saQ
A8B9c6k-p-8SMFL-saQ

测试用例全部通过。


总结

本题的要求是以0为特征对字符串进行分串,因此首先考虑使用字符串的split方法进行切割,从而获得各段子串,再根据题目要求对子串中的大小写字母进行对比,判断出哪个占比大,这里使用了字符串类中的替换方法,先去除数字避免下一步做大小写字母占比时影响,去除数字后得到纯字母子串,再进行一次替换去除全部大写或小写字母,再把处理过的纯大写或小写字母子串长度与前一步的子串长度对比即可得出,之后再用字符串的大小写转换方法处理后将新值重赋给原位置的字符串数组。之后按照题目要求格式循环输出即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值