当前位置:网站首页>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 PWM
- VTK 初步 (1) ----- 可视化管线
- The way for programmers to make money from a sideline business and increase their monthly income by 20K
- LeetCode refers to offer 10-I. Fibonacci sequence (simple)
- 51单片机BH1750智能补光灯台灯光强光照恒流源LED控制系统
- 【简易笔记】PyTorch官方教程简易笔记 EP2
- STM32单片机手机APP蓝牙高亮RGB彩灯控制板任意颜色亮度调光
- 动态规划、背包问题 6/25 110-115
- Pytorch - 07. Multidimensional characteristics of input processing
猜你喜欢

STM32单片机LORA无线远程火灾报警监控系统DS18B20MQ2火焰检测

pytorch-10. Convolutional Neural Networks (homework)

浅谈游戏中3种常用阴影渲染技术(1):平面阴影

2021-04-15 jacoco代码覆盖率统计和白盒测试

系统架构和问题定位

三种素数筛总结——(朴素筛,埃氏筛,线性筛)

LeetCode 938. Range Sum of Binary Search Trees (Simple)

离散数学的学习记录

样条曲线(下)之插值问题(贝塞尔曲线、B样条和一般样条曲线插值)

LruCache与DiskLruCache结合简单实现ImageLoader
随机推荐
.Net Core imports tens of millions of data to Mysql
LeetCode 94. Inorder Traversal of Binary Trees (Simple)
8个问题轻松掌握Unity前向渲染
解决错误 Could not find method leftShift() for arguments
碳酸锂、碳酸氢锂溶液除钙镁离子工艺原理
51单片机智能远程遥控温控PWM电风扇系统红外遥控温度速度定时关机
氨氮的有效吸附材料
电池级碳酸氢锂除杂质钙镁离子工艺原理
mysql使用常见问题和解决
Tensorflow 2.0 使用流程详解
Explain the principle of MySql index in detail
样条曲线(下)之插值问题(贝塞尔曲线、B样条和一般样条曲线插值)
通过adb devices命令在控制台显示企业级PicoNeo3设备号
Gradle学习(二)Groovy
ASP.NET连接SQL Server的步骤
在Unity中利用代码动态更改场景中的天空盒
pytorch-10. Convolutional Neural Networks (homework)
作为测试,常用的adb命令
STM32单片机OLED经典2048游戏单片机小游戏
【fiddler3】使用fiddler设置弱网模式