Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 程序查找连续的字母表并将其打印出来_Java - Fatal编程技术网

Java 程序查找连续的字母表并将其打印出来

Java 程序查找连续的字母表并将其打印出来,java,Java,公共类Noofcons字母表{ /** * @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++) {

公共类Noofcons字母表{

/**
 * @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);
    }
/**
 * @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);
    }
/**
*@param args
*/
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
String str=“aaabddaabbcc”;
整数计数=1;
字符串finalString=“”;

对于(inti=1;i用户3296744似乎正在使用的算法是

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

"o/p:a1b3d2a2b2c2"
与所需的输出不匹配:

"o/p:3a, 2b, 2d, 2a, 2b, 2c"
但仔细检查后,实际输出的计数相对于随附字母偏移了1;也就是说,如果3应与
a
匹配,则与
b
匹配,依此类推

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

String[] str2=str.split("");
您会注意到
str2
数组并不是您所期望的那样。它不是一个包含13个元素的数组,而是一个包含14个元素的数组,第一个元素是
null


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

我相信这可以做得更短、更甜,但

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));
        }

    }

}

我建议您使用更好的命名约定和已定义的结构,如String.charAt(),而不是使用空正则表达式进行拆分。如果您使用它,您所拥有的可能会起作用,但如果您重新指定“指针”,则读起来会非常混乱正如您所命名的。

什么是连续字母表?根据预期的输出,您需要做的只是检查
charAt(i)==charAt(i+1)
?在调试器中运行它时会发生什么?连接到最后一个字符串时,我会得到字符的ascii码,但没有计数:
3a
2b
2d
2a
2b
2c