程序找到连续的字母并打印出来

时间:2014-03-28 17:42:03

标签: java

公共类NoOfConsAlphabet {

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub

    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, 有人能告诉我如何解决这个问题并不确定这是什么?

然而以下程序使用拆分工作 公共类NoOfConsAlphabet {

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub

    String str="aaabbddaabbcc";
    String[] splitString=str.split("");
    int count=1;
    String finalString="";
    for(int i=1;i<str.length()-1;i++)
        {
            if(splitString[i].equals(splitString[i+1]))
            {
                ++count;

            }
            else
            {

                finalString+=splitString[i]+count+",";
                count=1;
            }   

        }
    System.out.println(finalString);
    }

} O / P:A3,B2,D2,A2,B2,

2 个答案:

答案 0 :(得分:0)

user3296744似乎正在处理的算法是Run-length encoding

这里的问题不仅仅是实际输出:

"o/p:a1b3d2a2b2c2"

与所需的输出不匹配:

"o/p:3a, 2b, 2d, 2a, 2b, 2c"

但仔细观察后,实际输出的计数相对于随附的字母移动了一个;也就是说,3应该与a匹配,它与b匹配,依此类推。

如果您在调试模式下运行代码,并在行后面有一个断点:

String[] str2=str.split("");

您会注意到str2数组并不是您所期望的。它不是一个包含13个元素的数组,而是实际上有14个元素,第一个元素是null

因此我建议您避免使用split()函数,而不是将字符串分解为数组,您可以使用charAt()函数来访问所需的字符。注意:这可能需要您将for循环修改为标准版本而不是每个版本。

答案 1 :(得分:0)

我确信这可以做得更短,更甜美但是......

public class Main {

    public static void main(String[] args) {  
        findAndPrintConsecutiveCharacters("aaabbddaabbcc");
    }

    private static void findAndPrintConsecutiveCharacters(String sToPrint){

        for(int i = 0; i < sToPrint.length(); i ++){
            char c = sToPrint.charAt(i);
            int occurences = 1;

            if(i <= sToPrint.length() - 2) { //limit the nested for so we dont go out of bounds

            for (int i2 = i + 1; i2 < sToPrint.length(); i2 ++){
                char c2 = sToPrint.charAt(i2);

                if(c2 == c)
                    occurences += 1;
                else{
                    i += occurences - 1; //shift i by the amount of occurences, this will prevent counting consecutive chars multiple times
                    break;
                }
            }

            }
            else
                break; //we are on our last char

            System.out.println(String.valueOf(occurences) + String.valueOf(c));
        }

    }

}

输出

3a
2b
2d
2a
2b
2c

我建议您使用更好的命名约定和已定义的构造,如String.charAt(),而不是使用空的正则表达式进行拆分。你有什么可能会工作,如果你乱用它,但如果你重新分配你指定它的“指针”,它是非常令人困惑的。