为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

一只斗牛犬 2021-06-28 13:14:50
如果输入是,我只想从给定的字符串中打印 3 个相同的连续字符,如下所示:"aasssfddddvvv"那么我应该得到输出作为输出:sssvvv 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();    }}
查看完整描述

3 回答

?
白衣染霜花

TA贡献1796条经验 获得超10个赞

这个答案与 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


查看完整回答
反对 回复 2021-06-30
?
www说

TA贡献1775条经验 获得超8个赞

第一个问题是,你试图达到阵列的lenght + 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++)

代替


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])


查看完整回答
反对 回复 2021-06-30
  • 3 回答
  • 0 关注
  • 185 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信