簡體   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