我希望实现一种方法来执行基本字符串压缩,其形式如下:

aabcccccaaa -> a2b1c5a3

我有这个程序:
import java.util.Scanner;

public class Main {

  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);

    String str = sc.nextLine();

    System.out.println(compress(str));
  }

  public static String compress(String str) {
    char[] chars = str.toCharArray();

    int count = 0;
    String result = "";

    for (int i = 0; i < chars.length; i++) {
      char curr = chars[i];
      result += curr;

      for (int j = i; j < chars.length; j++) {
        if (chars[j] == curr) {
          count++;
        }
        else {
          i += count;
          break;
        }
      }
      result += count;
      count = 0;
    }

    return result;
  }

}

但在我的测试中,我总是漏掉最后一个字符。
我假设这是因为程序在应该退出for循环之前就已经退出了,但是为什么会这样呢?
谢谢

最佳答案

你不需要两个for循环就可以一次完成

    String str = "aaabbbbccccca";
    char[] chars = str.toCharArray();
    char currentChar = str.length() > 0 ? chars[0] : ' ';
    char prevChar = ' ';
    int count = 1;
    StringBuilder finalString = new StringBuilder();

    if(str.length() > 0)
    for(int i = 1; i < chars.length; i++)
    {
        if(currentChar == chars[i])
        {
            count++;
        }else{
            finalString.append(currentChar + "" + count);
            prevChar = currentChar;
            currentChar = chars[i];
            count = 1;
        }
    }

    if(str.length() > 0 && prevChar != currentChar)
        finalString.append(currentChar + "" + count);

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

输出为:aaabbbccccccca的a3b4c5a1

10-02 02:59
查看更多