如何反转整个句子的字符大小写?



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

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

在文件中 part1.txt 谎言 当我
年轻
比今天
年轻得多
Информацию из файла
в верхний регистр

第 1 部分.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);
}
}

实用.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);
}
}

你很接近,因为你的正则表达式很好,你需要循环找到的匹配字符,尽管有几个问题如下:

• 您需要遍历找到的匹配项,而不是字符数组input.toCharArray()

• 使用matcher.group(1)获取匹配组

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

  1. 使用while (m.find())查找所有匹配项
  2. 使用m.group(1)将找到的匹配项转换为char数组

    char[] chars = m.group(1).toCharArray();
    
  3. 长度和使用无需||(OR( 条件 附加替换

现场演示

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();
}

最新更新