Java 仅打印给定字符串中的3个连续字符

Java 仅打印给定字符串中的3个连续字符,java,string,char,Java,String,Char,我只想从给定字符串中打印3个相同的连续字符,如下所示 如果输入为: "aasssfddddvvv" 然后我应该将输出作为输出: sss vvv count=2 这是我的要求,请在这方面帮助我 我的代码: import java.util.Scanner; class Test { public static void main(String args[]) { Scanner scan = new Scanner(System.in); Syst

我只想从给定字符串中打印3个相同的连续字符,如下所示 如果输入为:

"aasssfddddvvv"
然后我应该将输出作为输出:

sss
vvv 
count=2
这是我的要求,请在这方面帮助我

我的代码:

import java.util.Scanner;

class Test {

    public static void main(String args[]) {
        Scanner scan = new Scanner(System.in);
        System.out.println("Enter the String: ");
        char s[] = scan.nextLine().toCharArray();

        for (int i = 0; i < s.length - 1; i++) {

            if (s[i] == s[i + 1] && s[i] == s[i + 2] && s[i] == s[i + 3]) {
                System.out.println(s[i]);

            }
        }
        scan.close();
    }
}
import java.util.Scanner;
课堂测试{
公共静态void main(字符串参数[]){
扫描仪扫描=新扫描仪(System.in);
System.out.println(“输入字符串:”);
char s[]=scan.nextLine().tocharray();
对于(int i=0;i
第一个问题是,您试图达到中数组的长度+2索引,这是不可能的

假设字符串长度为5

0:  0 1 2
1:  1 2 3
2:  2 3 4
3:  3 4 (5)
4:  4 **(5) (6)**
如您所见,您试图达到5,这不是字符串的一部分。所以试试看

for (int i = 0; i < s.length - 2; i++)
而不是

if (s[i] == s[i + 1] && s[i] == s[i + 2] && s[i] == s[i + 3])

无法检查。单元格i+2和i+3,因为当到达i=长度-2时,将跨越数组边界, 您应该计算序列并检查长度是否足够,如果足够,请打印。此外,在您的示例中,您比较的是4个单元格,因此长度将为4而不是3,请在1中开始seq,因为当您读取单个字符时,其序列为1:

import java.util.Scanner;

class Test {

    public static void main(String args[]) {
        Scanner scan = new Scanner(System.in);
        System.out.println("Enter the String: ");
        char s[] = scan.nextLine().toCharArray();
        int seqLen = 3;
        int cnt = 1;
        for (int i = 1; i < s.length; i++) {

            if (s[i] == s[i - 1]) {
                cnt++;
             }
            if((cnt==seqLen)&&((s[i] !=s[i - 1] || i == s.length)){
                 if(cnt == seqLen)
                 {
                     for(int j= 0; j<seqLen; j++)
                     {
                         System.out.println(s[i - 1]);
                      }
                 }
                 cnt=1;
            }          
        }
    scan.close();
    }
}
import java.util.Scanner;
课堂测试{
公共静态void main(字符串参数[]){
扫描仪扫描=新扫描仪(System.in);
System.out.println(“输入字符串:”);
char s[]=scan.nextLine().tocharray();
int-seqLen=3;
int-cnt=1;
对于(int i=1;i对于(int j=0;j首先遍历
char[]
数组。然后,在
if
语句中

  • 首先确保数组中剩余的字符超过2个
  • 然后将
    s[i]
    与下一个字符(
    s[i+1]
    )和下一个字符(
    s[i+2]
    )之后的字符进行比较

替换代码的这一部分

for (int i = 0; i < s.length; i++) {
    if (i < s.length - 2 && s[i] == s[i + 1] && s[i] == s[i + 2]) {
        System.out.println(s[i]);
    }
}
for(int i=0;i
这个答案与OP中使用的更为手动的方法不同。但是,使用Java中的正则表达式模式匹配器处理这个问题相当简单。我们可以在模式
()\\2*
上进行匹配,以捕获类似字母的所有组。然后,只需打印出出现为3的组

String line = "aasssfddddvvv";
String pattern = "((.)\\2*)";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(line);

while (m.find()) {
    if (m.group(1).length() == 3) {
        System.out.println(m.group(1));
    }
}

sss
vvv

用这个替换代码的主要逻辑。 这里我们检查是否只有3个重复字符。通过确保第四个字符不同

int count=0;
for (int i = 0; i < s.length - 3; i++) {
    if (s[i] == s[i + 1] && s[i] == s[i + 2] && s[i] != s[i + 3]) {
        System.out.println(s[i]+s[i]+s[i]);
        count++;
    }
}
System.out.println("count="+count);
int count=0;
对于(int i=0;i
导入java.util.Scanner;
课堂测试{
公共静态void main(字符串参数[]){
扫描仪扫描=新扫描仪(System.in);
System.out.println(“输入字符串:”);
char s[]=scan.nextLine().tocharray();
整数计数=0;
对于(int i=0;i
您似乎只需要3个连续字符的严格计数。如果是这种情况,即使在修复代码中的问题(不改变整体逻辑)后,它也会打印
ddd
两次。以下是固定代码的输出:

sss 
ddd
ddd
vvv
count=4
我所说的固定代码是指处理这些问题

  • 比较太长,修复方法:删除
    和&s[i]==s[i+3]
  • 需要将条件调整为
    i
  • 只打印一个字符(可能不是真正的问题)
  • 每次找到匹配项时添加计数器
  • 这是固定的代码(请记住,这仍然不能产生您想要的正确输出

    基本思想是遍历字符串,如果相同,则将
    字符数增加一,如果不同,则重置。我们还需要使用不打算用作输入的字符对其进行初始化,例如

    因为我们要遍历整个字符串,所以for循环条件需要使用
    i
    转到最末尾

    重置时(检测到不同字符时),我们还想检查前一个是否有
    char\u count=3
    。如果是匹配项,则增加
    occurrence\u count
    。我们还需要在for循环后再次执行此操作,因为可能不会对输入字符串末尾发生的连续事件进行检查。代码如下:

        int occurence_count = 0;
        int char_count = 0;
        char last_char = '!';  
        for (int i = 0; i < s.length; i++) {
            if (s[i] != last_char) {                
                if (char_count == 3) {
                    occurence_count++;
                    System.out.println(""+last_char+last_char+last_char);                   
                }               
                last_char = s[i];
                char_count = 0;
            }
    
            char_count++;
    
        }
        if (char_count == 3) {
            occurence_count++;
            System.out.println(""+last_char+last_char+last_char);                   
        }
    
        System.out.println("count=" + occurence_count);
    
    int发生次数\u计数=0;
    int char_count=0;
    char last_char='!';
    对于(int i=0;iimport java.util.Scanner;
    class Test {
    
        public static void main(String args[]) {
            Scanner scan = new Scanner(System.in);
            System.out.println("Enter the String: ");
            char s[] = scan.nextLine().toCharArray();
            int count=0;
    
            for (int i = 0; i < s.length - 3; i++) {
    
                if (s[i] == s[i + 1] && s[i] == s[i + 2] && s[i]!=s[i + 3]) {
                    System.out.println(s[i]+s[i]+s[i]);
                    count++;
                }
            }
            if(s[s.length - 3] == s[s.length - 2] && s[s.length - 3] == s[s.length - 1]){
                System.out.println(s[s.length]+s[s.length]+s[s.length]);
                count++;
            }
            scan.close();
            System.out.println(count);
        }
    }
    
    sss 
    ddd
    ddd
    vvv
    count=4
    
    int occurence_count = 0;
    for (int i = 0; i < s.length - 2; i++) {
    
        if (s[i] == s[i + 1] && s[i] == s[i + 2]) {
            occurence_count++;
            System.out.println(s[i]);
        }
    }
    System.out.println("count=" + occurence_count);
    
    int char_count = 0;
    char last_char = '!';  
    
        int occurence_count = 0;
        int char_count = 0;
        char last_char = '!';  
        for (int i = 0; i < s.length; i++) {
            if (s[i] != last_char) {                
                if (char_count == 3) {
                    occurence_count++;
                    System.out.println(""+last_char+last_char+last_char);                   
                }               
                last_char = s[i];
                char_count = 0;
            }
    
            char_count++;
    
        }
        if (char_count == 3) {
            occurence_count++;
            System.out.println(""+last_char+last_char+last_char);                   
        }
    
        System.out.println("count=" + occurence_count);