java - 如何更改我的代码以成功执行?
问题描述
创建一个在控制台中显示文本文件内容的类,反转包含超过 3 个字符的每个单词的所有字符的大小写。单词被理解为拉丁或西里尔字符的连续序列。
输入示例:
When I was younger
So much younger
Than today
Информацию из файла
в верхний регистр
输出示例:
wHEN I was YOUNGER
So MUCH YOUNGER
tHAN TODAY
иНФОРМАЦИЮ из ФАЙЛА
в ВЕРХНИЙ РЕГИСТР
我的尝试:
private static final String ENCODING = "CP1251";
public static final String P13 = "(?U)(\\w{4,})";
public static final int THREE =3;
public static String getInput(String fileName) throws IOException {
StringBuilder sb = new StringBuilder();
Scanner scanner = new Scanner(new File(fileName), ENCODING);
while (scanner.hasNextLine()) {
sb.append(scanner.nextLine()).append(System.lineSeparator());
}
scanner.close();
return sb.toString().trim();
}
public static String convert(String text) {
String s = text;
StringBuffer sb = new StringBuffer();
Pattern p = Pattern.compile(P13);
Matcher m = p.matcher(s);
int max = THREE;
while (m.find()) {
if (m.group().length() > max) {
m.appendReplacement(sb, m.group(1).toUpperCase());
}
}
return m.appendTail(sb).toString();
}
解决方案
一个可能完整的实现:
public static String convert(String text) {
String s = text;
StringBuffer sb = new StringBuffer();
Pattern p = Pattern.compile(P13);
Matcher m = p.matcher(s);
int max = THREE;
while (m.find()) {
if (m.group().length() > max) {
String replacement = transform(m.group(1));
m.appendReplacement(sb, replacement);
}
}
return m.appendTail(sb).toString();
}
private static String transform(String origin) {
Character[] result = origin.chars()
.mapToObj(i -> (char) i)
.map(theChar -> {
if (Character.isUpperCase(theChar)) {
return Character.toLowerCase(theChar);
} else {
return Character.toUpperCase(theChar);
}
})
.toArray(Character[]::new);
return new String(ArrayUtils.toPrimitive(result));
}
您需要学习通过断点调试代码以查看发生了什么。
推荐阅读
- node.js - TypeError:_stream.Readable.from 不是 sequelize node js 中的函数
- javascript - Vuetify - 选定的 v-radio 未在 v-model 上设置值
- r - 如何仅计算 R 中的非空列,而包含稀疏 NA 的列?
- node.js - 收到错误代码“无法获取 /admin/add-product”
- sql - 用于指定 IN 子句中使用的列表的存储过程参数?
- sas - PROC TRANSPOSE 值列,同时保留日期和小时结束
- swift - UITextContentType 清除 swift 5 中下一个 UITextField 的自动填充
- prometheus - 用一个标签对所有计数器求和 - 普罗米修斯
- asp.net - Payu的支付api验证不起作用
- node.js - 有没有办法在 node.js 中自动添加一对对象的每个元素?