当前位置:网站首页>21天学习挑战赛--字符串切割
21天学习挑战赛--字符串切割
2022-08-10 05:36:00 【yeah_you_are】
活动地址:CSDN21天学习挑战赛
题目描述
给定一个非空字符串S,其被N个‘-’分隔为N+1个的字串,给定正整数K,要求除第一个子串外,其余的子串每K个字符组成新的子串,并用‘-’分隔。对于新组成的每一个子串,如果它含有的小写字母比大写字母多,则将这个子串的所有大写字母转换为小写字母;反之,如果它含有的大写字母比小写字母多,则将这个子串的所有小写字母转换为大写字母;如果大小写字母数量一样多则不做转换。
输入示例
3
输出
说明
子串为12abc、abCABc、[email protected],除去第一个子串,剩余的按照3个字符分隔,则新的子串为12abc、abC、ABc、4aB、@,然后各个子串计算大小写字母个数转换大小写,则变为12abc、abc、ABC、4aB、@,最后由‘-’拼接得到结果。
思考分析
根据题目可以知道基本可以分为以下两个处理步骤
- 按照特定正整数K切割除去第一个字串外的字串,得到新的字串;
- 每个字串计算大小写字母数量,将所有字母转换为数量多的大小写。
代码处理
那么问题就变简单了,第一个问题:按照定长切割字符串。
public String split(String str, int n) {
//子串长度
int len = str.length();
//长度不够,直接返回
if (len <= n)
return str;
//第一次切割
String res = str.substring(0,n);
//定义切割起始位置
int start = n;
while (start < len) {
//定义切割末尾位置,避免超出子串长度
int end = Math.min(start + n, len);
//切割并拼接
res += "-" + str.substring(start, end);
//下次切割位置
start = end;
}
return res;
}
其中需要注意的就是切割避免超出子串长度,然后就是循环边界的定义。
接下来解决第二个问题,计算大小写字母数量,并转换大小写。
public String change(String str) {
int len = str.length();
//记录大小写字母数量
int a,b;
a = b = 0;
for (int i=0;i<len;i++) {
char c = str.charAt(i);
//大小写字母计数
if (c >= 'a' && c <= 'z')
a ++;
else if (c >= 'A' && c <= 'Z')
b ++;
}
//大小写字母转换
if (a > b) {
return str.toLowerCase();
}else if (b > a) {
return str.toUpperCase();
}
return str;
}
接下来就是将两个方法结合一下就可以了。
public static void main(String[] args) {
String str = "[email protected]";
int n = 3;
//按照分隔符切割
String[] s1 = str.split("-");
String s = s1[0];
for (int i=1;i<split.length;i++) {
//定长切割
s += "-" + split(s1[i], n);
}
//按照分隔符切割
String[] s1 = s.split("-");
//大小写字母转换
String res = change(s1[0]);
for (int i=1;i<s1.length;i++){
res += "-" + change(s1[i]);
}
//打印结果
System.out.println(res);
}
这里用了两个循环处理,有点消耗性能,其实可以优化调整为一个循环实现。
原文地址
边栏推荐
猜你喜欢

LruCache与DiskLruCache结合简单实现ImageLoader

STM32单片机OLED经典2048游戏单片机小游戏

LeetCode refers to the offer 21. Adjust the order of the array so that the odd numbers are in front of the even numbers (simple)

C陷阱与缺陷 个人阅读笔记

详解样条曲线(上)(包含贝塞尔曲线)

51单片机AD590温度测量ADC0832运放2.73V减法电压变换

浅谈游戏中3种常用阴影渲染技术(2):阴影锥

【C语言】结构体变量学习笔记1

Pytorch配置与实战--Tips

【fiddler3】使用fiddler设置弱网模式
随机推荐
以STM32F103C6TA为例通过配置CubeMX实现GPIO输出完成点灯实例
Notes for Netual Network
I don't like my code
剑指 Offer(第 2 版)7/4 1-4
常用模块封装-pymysql、pymongo(可优化)
详解 Hough 变换(上)基本原理与直线检测
LeetCode refers to offer 10-I. Fibonacci sequence (simple)
STC12C5A60S2单片机WIFI信号扫描报警监视系统信号增强信号过低报警
LeetCode Interview Question 17.14 Minimum k Number (Moderate)
Pico设备中的截图以及视频文件通过adb命令保存到电脑中
Radon 变换原理和应用
Pytorch配置与实战--Tips
通过配置CubeMX的TIMER的PWM初始化实现硬件PWM呼吸灯闪烁
三种素数筛总结——(朴素筛,埃氏筛,线性筛)
为什么游戏需要热更新
pytorch-10. Convolutional Neural Networks (homework)
动态规划、背包问题 6/22 96-100
51单片机AD590温度测量ADC0832运放2.73V减法电压变换
二维卷积定理的验证(下,cv2.filter2D())
优先级队列,大小顶堆PriorityQueue