Неправильный вывод следующих строковых программ

1
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
    char + int => int !
Теги:
string

3 ответа

0
Лучший ответ

Использование оператора + на aa char и int приводит к char представляющему сумму обоих (и не конкатенация). См. Этот ответ для подробного объяснения и исключений.

Итак, утверждение

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

Заканчивается сложение char + int, а не конкатенация строк.

Чтобы str.charAt(i)+ преобразуйте str.charAt(i)+ в String.

3

Вы по существу добавляете:

char + int + String

Поскольку + остается ассоциативным, вы в конечном итоге делаете:

(char + int) + String

поэтому int + String; и только на этом этапе происходит конкатенация строк.

Решением было бы использовать String.format():

String.format("%c%d,", str.charAt(i), count);
  • 1
    +1 для String.format ()
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(",");

Это яснее и эффективнее :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню