如何颠倒整个句子的大小写?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何颠倒整个句子的大小写?相关的知识,希望对你有一定的参考价值。

我无法解释如何借助常规字符来转换字符大小写。在此阶段,更改所有字符的大小写,但是有必要仅在选择中更改大小写。需要更改什么??

任务创建一个类,该类在控制台中显示文本文件的内容,将每个单词的所有字符的大小写反转(包含三个以上的字符)。

在文件part1.txt中位于当我年轻时这么年轻比今天Информациюизфайлаверхнийрегистр

part1.java

import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Part1 {

    public static void main(String[] args) throws IOException {
        System.out.println(mainMethod(Util.readFile("part1.txt")));
    }

    public static String mainMethod(String input) {
        Pattern p = Pattern.compile("(\\w{4,}+|[А-Яа-яёЁ]{4,}+)");
        Matcher m = p.matcher(input);
        char[] chars = input.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            char c = chars[i];
            if (m.find(0)) {
                if (Character.isUpperCase(c) || chars.length <= 4) {
                    chars[i] = Character.toLowerCase(c);
                } else {
                    chars[i] = Character.toUpperCase(c);
                }
            }
        }
        return new String(chars);
    }
}

Util.java

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Util {

    private static final String ENCODING = "Cp1251";


    public static String readFile(String path) throws IOException {
        byte[] bytes = Files.readAllBytes(Paths.get(path));
        return new String(bytes, ENCODING);
    }

    public static Matcher getMatcher(String regex, String input) {
        return Pattern.compile(regex).matcher(input);
    }
}
答案

您已经很接近了,因为您的正则表达式很好,您需要循环遍历发现的字符,尽管有以下几个问题:

•您需要遍历找到的匹配项而不是char数组input.toCharArray()•使用matcher.group(1)

获取匹配组

因此,请按照以下步骤解决问题:

  1. 使用while (m.find())查找所有匹配项
  2. 使用m.group(1)作为char[] chars = m.group(1).toCharArray();将找到的匹配项转换为数组
  3. 不需要长度或使用||条件并使用appendReplacement

Live demo

public static void main(String[] args) {
    System.out.println(mainMethod("When I was younger So much younger Than "+
    "today Информацию из файла в верхний регистр"));
}

public static String mainMethod(String input) {
    Pattern p = Pattern.compile("(\\w{4,}+|[А-Яа-яёЁ]{4,}+)");
    Matcher m = p.matcher(input);
    StringBuffer sb = new StringBuffer(input.length());
    while (m.find()) {
        char[] chars = m.group(1).toCharArray();
        for (int i = 0; i < chars.length; i++) {
            char c = chars[i];
            if (Character.isUpperCase(c)) {
                chars[i] = Character.toLowerCase(c);
            } else {
                chars[i] = Character.toUpperCase(c);
            }
        }
        m.appendReplacement(sb, String.valueOf(chars));
    }
    m.appendTail(sb);
    return sb.toString();
}

以上是关于如何颠倒整个句子的大小写?的主要内容,如果未能解决你的问题,请参考以下文章

使用 C++ 反转句子中的每个单词需要对我的代码片段进行代码优化

3学习单元测试代码覆盖率工具的使用把一个英语句子中的单词次序颠倒后输出。

1)把一个英语句子中的单词次序颠倒后输出。例如输入“how are you”,输出“you are how”; 编写单元测试进行测试; 用ElcEmma查看代码覆盖率,要求覆盖率达到100

输入控制

把一个英语句子中的单词次序颠倒后输出。例如输入“how are you”,输出“you are how”;

把一个英语句子中的单词次序颠倒后输出。例如输入“how are you”,输出“you are how”;