Java 如何在一个字符串中找到四元组?

Java 如何在一个字符串中找到四元组?,java,Java,我有这个测试的挑战,但我绝对是初学者,所以我坚持它,任何适当的解决方案将非常感谢 我们可以说字符串中的“四倍”是一个连续出现四次的字符。打印给定字符串中的四位数。这四个部分可能重叠 提示:注意空格 输入格式 带字符串的单行 输出格式 一个数字 样本输入 abcxxxxabc 样本输出 二, import java.util.*; 公务舱四座{ 公共静态void main(字符串[]args){ 扫描仪sc=新的扫描仪(System.in); 字符串s=sc.nextLine(); char[]c

我有这个测试的挑战,但我绝对是初学者,所以我坚持它,任何适当的解决方案将非常感谢

我们可以说字符串中的“四倍”是一个连续出现四次的字符。打印给定字符串中的四位数。这四个部分可能重叠

提示:注意空格

输入格式 带字符串的单行

输出格式 一个数字

样本输入 abcxxxxabc

样本输出 二,

import java.util.*;
公务舱四座{
公共静态void main(字符串[]args){
扫描仪sc=新的扫描仪(System.in);
字符串s=sc.nextLine();
char[]c=s.toCharArray();
int j=0;int k=1;int m=j+2;

对于(inti=0;i未测试,但我认为从现在起,您可以测试并更正它

public class CheckQuadruple {
    private Boolean checkQuadrupleInString(String str, int i) {
        if (i + 3 >= str.length())
            return false;
       if (str.charAt(i) != str.charAt(i + 1))
           return false;
       if (str.charAt(i + 1) != str.charAt(i + 2))
          return false;
        if (str.charAt(i + 2) != str.charAt(i + 3))
            return false;
        return true;
    }

    public int findQuadruple(String str) {
        int sum = 0;
        for (int i = 0; i < str.length(); i++) {
            if (checkQuadrupleInString(str, i))
                sum += 1;
        }
        return sum;
    }
}
公共类检查四倍{
私有布尔校验字符串(字符串str,int i){
如果(i+3>=str.length())
返回false;
如果(str.charAt(i)!=str.charAt(i+1))
返回false;
如果(str.charAt(i+1)!=str.charAt(i+2))
返回false;
如果(str.charAt(i+2)!=str.charAt(i+3))
返回false;
返回true;
}
公共整数find4ple(字符串str){
整数和=0;
对于(int i=0;i
使用for循环的非常简单的暴力方法:

    String input = "abcXXXXXabc";

    // Counter to store the number of quadruples found
    int quadrupleCounter = 0;

    // Loop over each character in the input string (skip the last 3 to prevent going out of bounds)
    for(int i = 0;i < input.length() - 3; i++) {
      // Get the current char in the string + the next 3
      char c1 = input.charAt(i);
      char c2 = input.charAt(i + 1);
      char c3 = input.charAt(i + 2);
      char c4 = input.charAt(i + 3);

      // Check if all 4 characters are equal
      if(c1 == c2 && c2 == c3 && c3 == c4) {
        quadrupleCounter++; // Increase the counter
      }
    }

    System.out.println(quadrupleCounter);
String input=“abcxxabc”;
//计数器以存储找到的四倍数
int四重计数=0;
//循环输入字符串中的每个字符(跳过最后3个以防止越界)
对于(int i=0;i
或使用regexp(只是为了好玩):


如果我理解正确的话,“aaaabcccccc”意味着这个字符串中有4个四元组,比如你说的,它们可以重叠。这意味着aaaa是1,前四个ccc是2,然后从第二个c开始计数,还有一个是3,然后另一个是从第三个c开始计数,所以是4。 如果是这样,那么下面的代码应该可以

因此,我们通过将字符串拆分为字符来生成一个字符串“stringArray”。然后我们使用firs for循环(带i)来迭代所有字母,然后在该for循环中,我们生成另一个for循环来检查当前字母是否等于接下来的3个字母--->如果是真的,那么我们增加quadCount(我们找到了多少个四元组).然后,当forloop完成时,我们打印出quadCount

您可以看到,我们检查j=i+3是否小于字符串数组的长度(在第二个forloop中),因为如果在我们检查的字符数组之后,字母数组的末尾没有3个字符,那么肯定也不会有3个类似的字符

如果注意空格意味着“cccc”没有任何四元组,那么下面的代码是正确的。如果这意味着你不应该考虑空格,并且“cccc”有一个四倍,那么只需调用字符串上的.Trime.2方法。 类似于:String quad=“aaaabccc ccc”.trim();-->这将从字符串中删除(修剪)所有空格,代码就可以了

public static void main(String[] args) {
    String quad= "aaaabcccccc";
    int quadCount=0;
    String[] stringArray= quad.split("");

    for(int i=0; i<stringArray.length;i++){
        String current= stringArray[i];
        int j=i+3;
        if(j<stringArray.length){

            if(current.equals(stringArray[i+1]) && current.equals(stringArray[i+2]) && current.equals(stringArray[i+3]) ){
                quadCount++;
            }
        }

    }
        System.out.println("Quadcounter final is: "+quadCount);
    }
publicstaticvoidmain(字符串[]args){
字符串quad=“aaaabccccc”;
int quadCount=0;
String[]stringArray=quad.split(“”);

对于(int i=0;i您可以使用for循环和String substring()方法:

扫描仪输入=新扫描仪(System.in);
String str=input.nextLine();
整数计数=0;
对于(int i=0;i
嗨,阿提拉,欢迎来到SO。请查看下面的链接。到目前为止,您尝试了什么,您到底在哪一部分遇到了困难?您好,我可以提供一些我编写的代码,但这绝对是正确的“方法”为了解决这个问题。我一周前刚开始编写代码,我应该看到一个工作代码来理解逻辑。我试图做的是找到第一个重复的字符,然后比较这些字符是否重复了4次或更多次。对于一个有经验的人来说,这可能很容易,但我找不到解决方案。谢谢你的帮助我们的快速响应,我真的很感激。你能把它标记为解决方案吗?谢谢:)
Boolean
可以是
Boolean
我更改了代码,现在它在一个类中,你只需要实例化一个新对象,比如,
checkfourple c=newcheckfourple();
然后调用方法
c.findfourple(“TextToCheck”)再次感谢你,我要看一看。谢谢,这就是我需要的。这段代码比我预期的要简单得多。这对以后的参考很有用。再次感谢,我很感激。通过你的代码我可以完成我的一个,我意识到问题出在哪里,为什么我总是收到边界外的错误消息。再次谢谢。嘿,这是真的很酷,我真的很喜欢。我要研究这个方法,它看起来非常有用。Thx太多了。这是另一个很好的解决方案,Thx对于详细的解释,我也可以在其他任务中使用它。干得好,再次Thx。
    Pattern pattern = Pattern.compile("(.)\\1{3}");
    int quadrupleCounter = 0;
    Matcher matcher = pattern.matcher(input);
    if (matcher.find()) {
        do {
            quadrupleCounter++
        } while (matcher.find(matcher.start()+1));
    }
public static void main(String[] args) {
    String quad= "aaaabcccccc";
    int quadCount=0;
    String[] stringArray= quad.split("");

    for(int i=0; i<stringArray.length;i++){
        String current= stringArray[i];
        int j=i+3;
        if(j<stringArray.length){

            if(current.equals(stringArray[i+1]) && current.equals(stringArray[i+2]) && current.equals(stringArray[i+3]) ){
                quadCount++;
            }
        }

    }
        System.out.println("Quadcounter final is: "+quadCount);
    }
    Scanner input = new Scanner(System.in);
    String str = input.nextLine();
    int count = 0;

    for (int i = 0; i < str.length()-3; i++)
        if (str.substring(i, i+2).equals(str.substring(i+2, i+4))) count++;

    System.out.print(count);