gpt4 book ai didi

java - 如何替换序列中的非 ASCII 字符?

转载 作者:行者123 更新时间:2023-11-30 06:48:01 24 4
gpt4 key购买 nike

本质上,这段代码的作用是:

  • 采纳意见。
  • 将长度大于 2 的每个字符序列替换为该字符重复的次数和字符本身(例如 jjjkkkkkllll = 3j5k4l)。输入不包含任何数值。
  • 返回结果。

代码:

private String replaceConsecutiveChars(String data) {
char[] dataChars = data.toCharArray();

int i = 0;
int k = 0;
Character charType = null;
for(Character c : dataChars) {
if(k == dataChars.length - 1 && i >= 2) {
data = data.replace(repeat(String.valueOf(charType), ++i), (i + Character.toString(charType)));
break;
}

if(i == 0) {
charType = c;
i++;
}else if(c == charType) {
i++;
}else if(c != charType && i > 2) {
data = data.replace(repeat(String.valueOf(charType), i), (i + Character.toString(charType)));

i = 1;
charType = c;
}else if(c != charType && i <= 2) {
i = 1;
charType = c;
}

k++;
}

return data;
}

private String repeat(String s, int n) {
return Stream.generate(() -> s).limit(n).collect(Collectors.joining(""));
}

但是,我的实现似乎只适用于有限的 ASCII 字符集,但我正试图让它适用于 Unicode 字符集。例如:

  • 输入 ddddddddkkkkkpppp 将正确输出 8d5k4p
  • 输入 êêêêÌÌÌÌÌÌÌØØØ 将错误地输出 êêêêÌÌÌÌÌÌÌØØØ
  • 输入 "rrrrrêêêêÌÌÌÌÌkkkkØØØ" 将错误地输出 5rêêêêÌÌÌÌÌ4kØØØ

这是为什么?

此外,有没有比我现在做的更好的方法?

最佳答案

您正在使用 == 比较 Character 的实例,这不会按预期工作,因为运算符比较的是对象引用而不是值。

一个简单的快速修复方法是将 for 循环更改为:

for (char c : dataChars) {
}

注意类型的变化(Character 到 char)。这样,在将 charTypec 进行比较时,它会自动拆箱为原始 char

另一种解决方案是将每个 c == charType 替换为 c.equals(charType) 以不比较引用,而是比较值。

关于java - 如何替换序列中的非 ASCII 字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44956814/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com