华为机试-0001-字符串分割

87 阅读4分钟

华为机试-0001-字符串分割

华为机试-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重新组织,并对每个部分根据大小写字母的数量进行转换。以下是详细解释:

  1. 导入和主类声明

    • import java.util.Scanner; 导入了Scanner类,用于读取用户输入。
    • public class Temp 定义了一个名为Temp的类,其中包含程序的入口点main方法。
  2. 读取输入

    • 程序首先创建了一个Scanner对象,用于从控制台读取输入。用户被要求输入两个值:

      1. 一个整数K,通过Integer.parseInt(scanner.nextLine())读取并转换为int类型。
      2. 一个字符串S,通过scanner.nextLine()读取。
  3. 字符串分割与处理

    • String[] splitArray = s.split("-"); 将字符串S按照-字符分割成多个子字符串,并存储在splitArray数组中。
    • StringBuilder resultStringBuilder = new StringBuilder(splitArray[0]); 初始化结果字符串构建器,初始值为分割后数组的第一个子串,这部分将保持不变。
  4. 拼接其他子串

    • 使用StringBuilder otherStringBuilder = new StringBuilder(); 来拼接分割后的其他部分。通过一个for循环,从splitArray数组的第二个元素开始,依次拼接这些子串。
  5. 按K个字符分割并转换

    • 外层循环按照K的值,依次从拼接后的字符串中提取子串(每次K个字符),并调用convert方法对其进行转换。
    • resultStringBuilder.append("-").append(...) 将转换后的子串添加到结果字符串中,并以-分隔。
  6. 转换方法

    convert方法接收一个子串并根据其中大写和小写字母的数量决定如何转换:

    • 如果大写字母多于小写字母,将整个子串转换为大写。
    • 如果小写字母多于大写字母,将整个子串转换为小写。
    • 如果大小写字母数量相等,不做转换。
    • 该方法通过Character.isUpperCase()Character.isLowerCase()来统计大写和小写字母的数量。
  7. 输出结果

    • 最终,程序输出通过上述处理后形成的结果字符串。

以上就是本文相关的所有内容了,如果发现有误欢迎评论指正,更多内容欢迎各位关注。

华为机试-0001-字符串分割.png

上图是由 Pic 生成的

关键词:Cyber style dogs

更多内容欢迎关注我(持续更新中,欢迎Star✨)

Github:CodeZeng1998/Java-Developer-Work-Note

技术公众号:CodeZeng1998(纯纯技术文)

生活公众号:好锅(Life is more than code)

其他平台:CodeZeng1998好锅