java计数字符在字符串中以连续方式出现的次数
我是Java新手。我正在尝试打印字符串中的字符及其计数。仅当同一字符出现在其旁边时,计数才会增加
例:
输入/输出:Sssgs
O/p:S1s2g1s1
计数每个字符的出现次数将给出完整计数的计数,而不管字符之间是否相邻。篡改i&;j循环给出了边界外误差
//ch[] is the String converted to a character array.
//count[] is an array to store count of the characters
//Checks if present char and next char are same and increments count
for(int i=0;i<ch.length;i++)
{
count[i]=0;
for(int j=0;j<ch.length;j++)
{
if(ch[i]==ch[j])
{
count[i]++;
}
}
}
//Prints Distinct char
for(int i=0;i<ch.length;i++)
{
int j;
for(j=0;j<i;j++)
{
if(ch[i]==ch[j])
{
break;
}
}
if(i==j)
{
System.out.print(ch[i]+" "+count[i]);
}
}
输入为>;地狱世界
预期输出应为>;H1E1 l2 o1 W1 o1 r1 l1 d1
# 1 楼答案
我刚刚对您的代码进行了一些更正,下面是它的外观:
当我只读取字符和它的出现次数,然后在迭代中跳转该数字时,大多数更改是在打印区中。它让我停在下一个不同的角色上
“Sssgs”的输出为“S1s2g1s1”,“HelloWorld”的输出为“H1E1L2O1W1O1R1D1”
# 2 楼答案
这是一个simpe解决方案,它不使用任何额外的数组,而是在下一个数组不同时直接打印计数的字符
# 3 楼答案
我讨厌这个解决方案,但我想您使用char[]是因为需要。如果不是强制性的,我建议您使用Lino建议的
StringBuilder
输出:
H1 e1 l2 o1 w1 o1 r1 l1 d1
说明:只需阅读整个单词一次(注意,您将在for循环中执行3次),并将上次读取的字符与新字符进行比较。如果匹配,则增加该字符的出现次数。如果不是,则打印它们并将新字符设置为最后一次读取。 当你结束读单词时,打印最后读到的字符
永远记住保持简单!和清理(如果接收到null或空值,您将在代码中获得一个null指针,只需将其写入其中以指出它)
# 4 楼答案
我想到了这个:
处理空字符串和空字符串。和带有
length == 1
的字符串(即string + 1
)此解决方案也不需要创建额外的
char[]
数组,因为它正在使用charAt