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'を使うことができます。 –
あなたが使用する唯一の場所は、あなたがループ上に保存している文字のためです。むしろばかげているようだ。なぜあなたはcharを使用して、ループの中で数字をループしないことを知っているので、最初に '1'の値を割り当てますか? –