我需要在java中创建一个程序,当给出的输入是:
hhllyyjhhh
输出应为
h2l2y2j1h3
而是我得到输出
h2l2y2j1
我知道原因,但请告诉我应该如何纠正或者说出新的逻辑。
在以下代码T
中是字符数组,ans
是一个空字符串。
int counter=0;
for(int i=0;i<T.length;i++)
{
for(int j=i;j<T.length;j++)
{
if(T[i]==T[j])
{
counter++;
}
else
{
ans=ans+T[i]+counter;
i=j-1;
counter=0;
break;
}
答案 0 :(得分:1)
在for loops
之后,您需要将最后一个字符值附加到ans
,因为它现在已被跳过。
if(counter>0) {
ans=ans+T[T.length-1]+counter
}
或者你只能用这样一个for循环:
char[] T = "hhllyyjhhh".toCharArray();
int counter = 1;
StringBuilder out = new StringBuilder();
for(int i=0;i<T.length-1;i++) {
if(T[i]==T[i+1]) {
counter++;
} else {
out.append(T[i]).append(counter);
counter=1;
}
}
if(counter>0) {
out.append(T[T.length-1]).append(counter);
}
System.out.println(out.toString());
答案 1 :(得分:1)
问题是,如果你的计数一直匹配,你不会添加最后一个字符,我建议你稍微改变你的方法并尝试向前扫描,然后再追加字符和计数(基本上将你的其他字符移到内部循环之外) -
char[] T = "hhllyyjhhh".toCharArray();
String ans = "";
for (int i = 0; i < T.length; i++) {
int count = 1;
while (i + count < T.length && T[i + count] == T[i]) {
count++;
}
ans += T[i] + String.valueOf(count);
i += count - 1;
}
System.out.println(ans);
在此处生成您要求的输出。
答案 2 :(得分:1)
检查以下代码。评论正在解释逻辑。
public static void main(String[] args) {
// invoking our method
System.out.println(getCompressedString("hhllyyjhhh"));
}
private static String getCompressedString(String rawString) {
final StringBuffer sb = new StringBuffer();
final char[] rawStringChars = rawString.toCharArray();
// the first symbol
int counter = 1;
char processingChar = rawStringChars[0];
// processing the rest of string symbols
for (int i = 1; i < rawStringChars.length; i++) {
// if there's another symbol
if (processingChar != rawStringChars[i]) {
sb.append(processingChar);
sb.append(counter);
// setting new processing char and new counter
processingChar = rawStringChars[i];
counter = 1;
} else {
// if there's the same symbol
counter ++;
}
}
// writing "tail" part
sb.append(processingChar);
sb.append(counter);
return sb.toString();
}
答案 3 :(得分:0)
你需要在for循环之外添加最后一个字符及其计数,因为else部分不处理最后一个字符的追加。在这里,我调整了您的代码以获得所需的结果。
public static void main(String[] args) {
char T[] = { 'h', 'h', 'l', 'l', 'y', 'y', 'j', 'h', 'h', 'l', 'a' };
String ans = "";
int counter = 0;
int j = 0;
for (int i = 0; i < T.length; i++) {
if (j == T.length - 1) {
if (T[i] != T[j - 1]) {
counter = 1;
}
break;
}
for (j = i; j < T.length; j++) {
if (T[i] == T[j]) {
counter++;
if (j == T.length - 1) {
break;
}
} else {
ans = ans + T[i] + counter;
i = j - 1;
counter = 0;
break;
}
}
}
if (counter > 0) {
ans = ans + T[T.length - 1] + counter;
}
System.out.println(ans);
}