华为机试-0001-字符串分割
更多内容欢迎关注我(持续更新中,欢迎Star✨)
Github:CodeZeng1998/Java-Developer-Work-Note
技术公众号:CodeZeng1998(纯纯技术文)
生活公众号:好锅(Life is more than code)
其他平台:CodeZeng1998、好锅
题目描述
给定一个非空字符串S,其被N个‘-’分隔成N+1的子串,给定正整数K,
要求除第一个子串外,其余的子串每K个字符组成新的子串,并用‘-’分隔。
对于新组成的每一个子串,如果它含有的小写字母比大写字母多,则将这个子串的所有大写字母转换为小写字母;
反之,如果它含有的大写字母比小写字母多,则将这个子串的所有小写字母转换为大写字母;
大小写字母的数量相等时,不做转换。
输入描述:
输入为两行,第一行为参数K,第二行为字符串S。
输出描述:
输出转换后的字符串。
示例1 输入
3 12abc-abCABc-4aB@
输出
12abc-abc-ABC-4aB-@
说明
子串为12abc、abCABc、4aB@,第一个子串保留,后面的子串每3个字符一组为abC、ABc、4aB、@,abC中小写字母较多,转换为abc,ABc中大写字母较多,转换为ABC,4aB中大小写字母都为1个,不做转换,@中没有字母,连起来即12abc-abc-ABC-4aB-@
示例2 输入
12 12abc-abCABc-4aB@
输出
12abc-abCABc4aB@
说明
子串为12abc、abCABc、4aB@,第一个子串保留,后面的子串每12个字符一组为abCABc4aB@,这个子串中大小写字母都为4个,不做转换,连起来即12abc-abCABc4aB@
完整代码
import java.util.Scanner;
public class StringSegmentation {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入数字 K :");
int k = Integer.parseInt(scanner.nextLine());
System.out.println("请输入字符串 S :");
String s = scanner.nextLine();
scanner.close();
String[] splitArray = s.split("-");
StringBuilder resultStirngBuilder = new StringBuilder(splitArray[0]);
// 如果第一个子串也需要转化大小写,则使用这行代码
// StringBuilder resultStirngBuilder = new StringBuilder(convert(splitArray[0]));
StringBuilder otherStringBuilder = new StringBuilder();
for (int i = 1; i < splitArray.length; i++) {
otherStringBuilder.append(splitArray[i]);
}
for (int i = 0; i < otherStringBuilder.toString().length(); i += k) {
resultStirngBuilder
.append("-")
.append(
convert(
otherStringBuilder
.toString()
.substring(
i,
Math.min(
i + k,
otherStringBuilder
.toString()
.length()))));
}
System.out.println(resultStirngBuilder.toString());
}
private static String convert(String substring) {
String resultString;
int upperNum = 0;
int lowerNum = 0;
char[] charArray = substring.toCharArray();
for (int i = 0; i < charArray.length; i++) {
if (Character.isUpperCase(charArray[i])) {
upperNum++;
} else if (Character.isLowerCase(charArray[i])) {
lowerNum++;
}
// if (charArray[i] >= 'a' && charArray[i] <= 'z') {
// lowerNum++;
// } else if (charArray[i] >= 'A' && charArray[i] <= 'Z') {
// upperNum++;
// }
}
if (upperNum > lowerNum) {
resultString = substring.toUpperCase();
} else if (upperNum < lowerNum) {
resultString = substring.toLowerCase();
} else {
resultString = substring;
}
return resultString;
}
}
代码解释
ChatGPT:
这段Java代码的主要功能是对输入的字符串按照指定的规则进行转换和处理。具体来说,它将一个由-分隔的字符串,根据给定的整数K重新组织,并对每个部分根据大小写字母的数量进行转换。以下是详细解释:
-
导入和主类声明:
import java.util.Scanner;导入了Scanner类,用于读取用户输入。public class Temp定义了一个名为Temp的类,其中包含程序的入口点main方法。
-
读取输入:
-
程序首先创建了一个
Scanner对象,用于从控制台读取输入。用户被要求输入两个值:- 一个整数
K,通过Integer.parseInt(scanner.nextLine())读取并转换为int类型。 - 一个字符串
S,通过scanner.nextLine()读取。
- 一个整数
-
-
字符串分割与处理:
String[] splitArray = s.split("-");将字符串S按照-字符分割成多个子字符串,并存储在splitArray数组中。StringBuilder resultStringBuilder = new StringBuilder(splitArray[0]);初始化结果字符串构建器,初始值为分割后数组的第一个子串,这部分将保持不变。
-
拼接其他子串:
- 使用
StringBuilder otherStringBuilder = new StringBuilder();来拼接分割后的其他部分。通过一个for循环,从splitArray数组的第二个元素开始,依次拼接这些子串。
- 使用
-
按K个字符分割并转换:
- 外层循环按照
K的值,依次从拼接后的字符串中提取子串(每次K个字符),并调用convert方法对其进行转换。 resultStringBuilder.append("-").append(...)将转换后的子串添加到结果字符串中,并以-分隔。
- 外层循环按照
-
转换方法:
convert方法接收一个子串并根据其中大写和小写字母的数量决定如何转换:- 如果大写字母多于小写字母,将整个子串转换为大写。
- 如果小写字母多于大写字母,将整个子串转换为小写。
- 如果大小写字母数量相等,不做转换。
- 该方法通过
Character.isUpperCase()和Character.isLowerCase()来统计大写和小写字母的数量。
-
输出结果:
- 最终,程序输出通过上述处理后形成的结果字符串。
以上就是本文相关的所有内容了,如果发现有误欢迎评论指正,更多内容欢迎各位关注。
上图是由 Pic 生成的
关键词:Cyber style dogs
更多内容欢迎关注我(持续更新中,欢迎Star✨)
Github:CodeZeng1998/Java-Developer-Work-Note
技术公众号:CodeZeng1998(纯纯技术文)
生活公众号:好锅(Life is more than code)
其他平台:CodeZeng1998、好锅