java - 读一个句子并只打印出相同字母连续重复 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] + ", ");
}
}
}
相反,该程序只是不重复任何内容。
解决方案
您的代码几乎是正确的,您犯的唯一逻辑错误是在您的内部循环中,一旦您发现一个不同的字母,您就会不断重置您的计数器变量:
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;
}
推荐阅读
- android - 不希望 alertDailog Edittext 接受空值
- python - 对低密度差异的多维数据进行聚类的最佳聚类算法是什么?
- azure - 我得到了未定义的存储帐户“Storage”。在本地运行 Azure Function docker 时出错
- java - 如何使用 Postman 在 Spring Boot 中的请求参数中传递时间戳、日期
- javascript - 使用 fetch 将本地 HTML 页面导入另一个 HTML 页面
- node.js - 在猫鼬查询中插入字符串以使其通用
- php - PHP - 将文本转换为 Unicode
- android - 谷歌地图点击兴趣点在Android和IOS上返回不同的placeId
- excel - VBA - 使用插入的行应用自动填充(基于输入框)并将其应用到其他工作表
- django - 每次我输入提交时,Is_valid 似乎都不是真的