以下String程序的输出不正确

时间:2014-04-01 12:26:49

标签: java string

public class NoOfConsAlphabet {

public static void main(String[] args) {

    String str="aaabbddaabbcc";
    int count=1;
    String finalString="";
    for(int i=1;i<str.length()-1;i++)
        {
            if(str.charAt(i)==str.charAt(i+1))
            {
                ++count;

            }
            else
            {

                finalString+=str.charAt(i)+count+",";
                count=1;
            }   

        }
    System.out.println(finalString);
    }
}

我得到这个作为我的o / p:99,100,102,99,100,有人可以告诉我如何解决这个问题不确定这是什么?需要得到a3,b2,d2,a2,b2的输出,

3 个答案:

答案 0 :(得分:3)

你基本上添加:

char + int + String

由于+是关联的,你最终会这样做:

(char + int) + String
因此int + String;并且只有在那一步才发生字符串连接。

解决方案是使用String.format()

String.format("%c%d,", str.charAt(i), count);

答案 1 :(得分:2)

这是问题所在:

str.charAt(i)+count+","

正在执行char + int转换,这只是整数运算,因为+是左关联的。当","与其连接时,生成的整数然后转换为字符串。

所以这个:

finalString+=str.charAt(i)+count+",";

相当于:

int tmp1 = str.charAt(i)+count;
String tmp2 = tmp1 + ",";
finalString += tmp2;

我建议您使用:

String.valueOf(str.charAt(i)) + count

强制字符串连接。更好的是,使用StringBuilder

builder.append(str.charAt(i)).append(count).append(",");

更明确的更有效:)

答案 2 :(得分:0)

+char上使用int运算符会导致char表示两者的总和(并且不会连接)。有关详细说明和例外情况,请参阅this答案。

所以,声明

finalString+=str.charAt(i)+count+",";

结束为char + int加法而不是字符串连接。

要连接,请先将str.charAt(i)+转换为String