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

如果输入是,我只想从给定的字符串中打印 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();

    }

}


一只斗牛犬
浏览 194回答 3
3回答

白衣染霜花

这个答案与 OP 中使用的更手动的方法背道而驰。但是,这在 Java 中使用正则表达式模式匹配器处理起来相当简单。我们可以在模式上进行匹配(.)\\2*,以捕获所有相似字母的组。然后,只需打印出仅作为 3 出现的组。String line = "aasssfddddvvv";String pattern = "((.)\\2*)";Pattern r = Pattern.compile(pattern);Matcher m = r.matcher(line);while (m.find()) {&nbsp; &nbsp; if (m.group(1).length() == 3) {&nbsp; &nbsp; &nbsp; &nbsp; System.out.println(m.group(1));&nbsp; &nbsp; }}sssvvv

www说

第一个问题是,你试图达到阵列的lenght + 2指数为这是不可能的。假设字符串长度为 50:&nbsp; 0 1 21:&nbsp; 1 2 32:&nbsp; 2 3 43:&nbsp; 3 4 (5)4:&nbsp; 4 **(5) (6)**如您所见,您尝试达到5,它不是字符串的一部分。所以试试for (int i = 0; i < s.length - 2; i++)代替for (int i = 0; i < s.length - 1; i++)提示:您可以从错误中获取此信息。线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException: 13它说你试图达到你不能达到的索引。第二个问题,您在 if 条件下检查 4 个字符。用:if (s[i] == s[i + 1] && s[i] == s[i + 2])代替if (s[i] == s[i + 1] && s[i] == s[i + 2] && s[i] == s[i + 3])
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java