当前位置:网站首页>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);
}
这里用了两个循环处理,有点消耗性能,其实可以优化调整为一个循环实现。
原文地址
边栏推荐
猜你喜欢
STM32F407ZG TIM通用定时器
Tkinter 模块学习
每日刷题(day01)——leetcode 53. 最大子数组和
LeetCode 292. Nim Game (Simple)
51单片机BH1750智能补光灯台灯光强光照恒流源LED控制系统
51单片机智能蓝牙APP加油站火灾预警安防防控报警监控系统MQ2DHT11
浅谈游戏中3种常用阴影渲染技术(2):阴影锥
STM32F407ZG GPIO输入相关实验
STM32单片机LORA无线远程火灾报警监控系统DS18B20MQ2火焰检测
LeetCode 1351. Counting Negative Numbers in Ordered Matrices (Simple)
随机推荐
.Net Core imports tens of millions of data to Mysql
【fiddler2】使用fiddler mock response 数据
通过adb devices命令在控制台显示企业级PicoNeo3设备号
LeetCode 162. Finding Peaks (Moderate)
接口自动化2.0
【fiddler4】使用fiddler设置简单并发
STC12C5A60S2单片机WIFI信号扫描报警监视系统信号增强信号过低报警
二叉树 6/20 86-90
开源游戏服务器框架NoahGameFrame(NF)客户端环境搭建(三)
Unity中Xml简介以及通过脚本读取Xml文本中的内容
多线程与多进程(概念详细讲解)
Gradle学习(二)Groovy
在Unity中让物体围绕自身的x、y、z轴进行旋转(亲测有效)
从零开始构建Google Protocol Buffer / protobuf 的helloworld工程(超级详细)
lua的模块与类
AR Foundation Editor Remote插件使用方法
LeetCode 94. Inorder Traversal of Binary Trees (Simple)
mysql分组排序并取各分组前几个数据
STM32F407ZG TIM通用定时器
电镀废水除六价铬