繁体   English   中英

如何比较单个字符串中的元素?

[英]How to compare elements in a single string?

当且仅当1和0并排重复多次时,我需要以1和0的字符串打印元素的索引。

例如:输入:“0010011”输出:“0,3,5”

重复从索引0,3和5开始。

这是我现在拥有的

Scanner keyboard = new Scanner(System.in);
    ArrayList runs = new ArrayList();


    System.out.println("Enter non empty string of 1s and 0s");
    String input = keyboard.nextLine();
    char[] array = input.toCharArray();

    for(int i = 0; i < input.length(); i++)
    {
        if(array[i] == array[i++])
        {
            runs.add(i);
        }

    }
    for(int i = 0; i<= array.length; i++)
    {
        System.out.println(runs);
    }

当我测试这个时,我尝试输入“00100”并获得“1,3,5”的输出。 另一个测试输入来自“0010011”以上并获得“1,3,5,7”。 它似乎是打印奇数,而不是数字开始重复的索引。 谁能发现我做错了什么? 我感觉它来自我在第一个for循环中的比较。

这应该工作:

Scanner keyboard = new Scanner(System.in);

System.out.println("Enter non empty string of 1s and 0s");
String input = keyboard.nextLine();
char lastChar = '~'

for(int i=0; i<input.length() - 1; i++) {
    if(input.charAt(i) == input.charAt(i + 1) && (i == 0 || input.charAt(i) != input.charAt(i - 1))) {
        System.out.println(i);
    }
}

我可以指出有三个直接的问题:

  • 首先是显而易见的 您正在使用i++ ,而您应该使用i + 1 i++将增加的价值i ,所以你就错过了一个索引那里下一次迭代。
  • 其次,你应该迭代到input.length() - 2 ,否则当你访问最后一个索引的array[i + 1]时,你会得到一个ArrayIndexOutOfBounds异常。
  • 如果按顺序超过2 0's1's则当前逻辑将失败。 它将打印01索引,例如00010

对于第三点,你应该做的是,一旦你发现两个连续的字符相同,你应该跳过即将到来的相同角色。 你需要一个内循环。 可能是一段do-while

您应该将for循环修改for

for(int i = 0; i < input.length() - 1; i++)
{
    if(array[i] == array[i+1])
    {
        System.out.println(i);
        do {
            i++;
        } while (i < input.length() - 1 && array[i] == array[i + 1]);
    }
}

此外, ArrayList没有length属性。 您应该使用size()方法来获得最大大小。


顺便说一句,这也可以使用正则表达式来完成。 好吧,你可能还没有被教过这个,但这只是另一种可能的方式:

Pattern pattern = Pattern.compile("0{2,}|1{2,}");
Matcher matcher = pattern.matcher(input);

while (matcher.find()) {
    System.out.println(matcher.start());
}

那里有两个问题:

首先,当postfix ++在生效之前返回值时,所以你将array [i]与它自己进行比较。

另外,你每个循环都做两个加1,所以只有奇数。

尝试这个 :-

Scanner keyboard = new Scanner(System.in);
    ArrayList runs = new ArrayList();


    System.out.println("Enter non empty string of 1s and 0s");
    String input = keyboard.nextLine();
    char[] array = input.toCharArray();

    for(int i = 0; i < input.length()-1; i++)
    {
        if(array[i] == array[i+1])
        {
            runs.add(i);
        }

    }
    for(int i = 0; i<= array.length; i++)
    {
        System.out.println(runs);
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM