首页 > 解决方案 > 如何使用 Java 找到后续字符的出现?

问题描述

我是java的新手。我了解如何使用 for 循环遍历字符串并计算 char 出现的次数。如果我有一个名为 x 的字符串被初始化为“aaabbbcccaaa”,我希望我的程序告诉我有 3a,然后是 3b,然后是 3c,然后是 3a。所以它会输出类似 3a3b3c3a 的东西。

我有以下代码:

public class ConsequentChars{
  public static String chars ( String x ){
    int len = x.length();
    String charOccurs = "";
    int count = 0;
    for(int i=0;i<len;i++){
      for(int j=0;j<len;j++){
        if(x.charAt(i)==x.charAt(j)){
          count++;
        }
      }
      charOccurs+=Integer.toString(count)+x.charAt(i);
      count = 0;
    }
    return rle;
  }
  public static void main(String[] args){
    System.out.println(chars("aaaaabbbbcccdde"));
  }
}

从上面的代码我得到:

5a5a5a5a5a4b4b4b4b3c3c3c2d2d1e.

什么时候应该:

5a4b3c2d1e.

我不确定我能做些什么来解决这个问题。我很感激任何帮助:)

标签: javachar

解决方案


在您的代码中,问题在于对于每个字符,您要继续计算该字符在字符串中出现的次数。因此,对于字符串“aabab”,您从第一个 'a' 开始,并计算 'a' 在整个字符串中出现的次数,并将其设为“a3”。但是然后,你转到下一个字符串,做同样的事情,你计算 'a' 在整个字符串中出现的次数,仍然是 3,使你的字符串现在是“a3a3”。为了解决此问题,您将需要停止此重复步骤。如果你想维护你当前的代码来学习,我建议你保留一个你已经打印出来的字符列表,并确保不要再次打印出来。所以,在第一个 for 循环中,你想要类似的东西

if(character hasn't appeared before){
    count the number of time it has appeared and append it to the output ` 
}

有更好的方法来解决这个问题,但现在修改你当前的代码可能会带来最好的学习体验。


推荐阅读