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,
Использование оператора +
на aa char
и int
приводит к char
представляющему сумму обоих (и не конкатенация). См. Этот ответ для подробного объяснения и исключений.
Итак, утверждение
finalString+=str.charAt(i)+count+",";
Заканчивается сложение char + int, а не конкатенация строк.
Чтобы str.charAt(i)+
преобразуйте str.charAt(i)+
в String
.
Вы по существу добавляете:
char + int + String
Поскольку +
остается ассоциативным, вы в конечном итоге делаете:
(char + int) + String
поэтому int + String
; и только на этом этапе происходит конкатенация строк.
Решением было бы использовать String.format()
:
String.format("%c%d,", str.charAt(i), count);
Это проблема:
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(",");
Это яснее и эффективнее :)
char
+int
=>int
!