Java 如何替换序列中的非ASCII字符?
本质上,此代码的作用是:Java 如何替换序列中的非ASCII字符?,java,string,unicode,ascii,Java,String,Unicode,Ascii,本质上,此代码的作用是: 接受输入 将长度大于2的每个字符序列替换为该字符的重复次数和字符本身(例如jjkkklll=3j5k4l)。输入不包含任何数值 返回结果 守则: private String replaceConsecutiveChars(String data) { char[] dataChars = data.toCharArray(); int i = 0; int k = 0; Character charType = null;
- 接受输入
- 将长度大于2的每个字符序列替换为该字符的重复次数和字符本身(例如
=jjkkklll
)。输入不包含任何数值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(""));
}
专用字符串替换连续字符(字符串数据){
char[]dataChars=data.tocharray();
int i=0;
int k=0;
Character charType=null;
for(字符c:数据字符){
如果(k==dataChars.length-1&&i>=2){
data=data.replace(重复(String.valueOf(charType),++i),(i+Character.toString(charType));
打破
}
如果(i==0){
charType=c;
i++;
}else if(c==图表类型){
i++;
}如果(c!=ChartType&&i>2),则为else{
data=data.replace(重复(String.valueOf(charType),i),(i+Character.toString(charType));
i=1;
charType=c;
}else if(c!=charType&&is).limit(n.collect)(收集器.连接(“”));
}
但是,我的实现似乎只适用于有限的ASCII字符集,但我正在尝试使其适用于Unicode字符集。例如:
- 输入的
将正确输出ddddddddkkkk pppp
8d5k4p
- 输入的代码将错误地输出代码
- 输入的
将错误地输出“rrrrrÌÌÌÌÌkkkØØØ”
5rÌÌÌ4kØØ
此外,有没有比现在更好的方法来执行此操作?您正在使用
==
比较角色实例,这将无法按预期工作,因为操作符比较对象引用而不是值
一个简单的快速修复方法是将for循环更改为:
for (char c : dataChars) {
}
请注意类型(从字符到字符)的变化。这样,当将charType
与c
进行比较时,它会自动取消绑定到基本字符
另一个解决方案是用
c.equals(charType)替换每个c==charType
不比较引用,而是比较值。为什么要使用字符包装类?这样我就可以使用null
。你唯一使用的地方就是你在循环中保存的字符。这似乎很愚蠢。为什么不使用字符并在开始时将其赋值为“1”,因为你知道你永远不会在循环中循环一个数字?