2
本質上,此代碼所做的是:如何替換序列中的非ASCII字符?
- 接受輸入。
- 將長度大於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包裝類? –
所以我可以使用'null'。 –
您使用的唯一地方是您在循環中保存的字符。似乎相當愚蠢。你爲什麼不使用一個字符並且最初爲它賦值'1',因爲你知道你永遠不會循環遍歷循環中的一個數字? –