首页 > 解决方案 > 读一个句子并只打印出相同字母连续重复 3 次或更多次的单词

问题描述

我想制作一个程序,其中只重复具有 3 个背靠背相同字母的单词。例如,mooonkey raaan 穿过山脉。该程序应该只重复mooonkey,raaan

public class Triplets2 {

public static void main(String[] args) {

    Scanner input = new Scanner(System.in);
    System.out.println("write a sentence");
    String in = input.nextLine();
    
    String [] sentence = in.split(" ");
    
    for (int i = 0; i < sentence.length; i++) {
        
        char [] word = sentence[i].toCharArray();
        int counter =0;
        
        for (int s = 0; s < word.length; s++) {
            
            char letter = word[s];
            
            for (int x = 0; x<word.length; x++) {
                
                if (letter == word[x]) {
                    counter++;
                }
                    else {
                        counter = 0;
                }
            }
        }
        if (counter >=3) {
            System.out.print(sentence[i] + ",  ");
        }
    }
}

相反,该程序只是不重复任何内容。

标签: javajava.util.scanner

解决方案


您的代码几乎是正确的,您犯的唯一逻辑错误是在您的内部循环中,一旦您发现一个不同的字母,您就会不断重置您的计数器变量:

if (letter == word[x]) {
    counter++;
} else {
    counter = 0;
}

因此,当您遍历诸如“raaan”之类的单词时,您的计数器将在到达字符串的最末尾时重置,因为“n”仅存在一次。这意味着您将只能检测到最后有 3 个连续字母的单词(例如“Hooo”)。

解决方案很简单:一旦你在一个单词中找到 3 个连续的字母,你就可以停止迭代并检查你的单词的其余部分。那时您已经知道它符合您的标准:

if (letter == word[x]) {
    counter++;
    if(counter >= 3) break; // stop inner loop checking once we found 3 letters
} else {
    counter = 0;
}

推荐阅读