检查字符串中是否有重复字符的运行

时间:2017-03-04 15:17:25

标签: java

我试图检查某人是否有人在聊天中输入了多次重复字符的消息。我想对所有可能的角色执行此操作,并检查它们是否超过某个限制。

int WithChars = m.length();
int WithoutChars = m.replace("-", "").length();


if(WithChars - WithoutChars >= 10) {
    //Do stuff
}

目前它只检查' - '但是我希望它检查多个字符,所以如果有人输入"<<<<<<<<<"或" aaaaaa"它仍然会做这个检查。

2 个答案:

答案 0 :(得分:1)

在我的头脑中,最简单的解决方案是循环遍历所有字母并检查前一个字母是否相同,如果是,则增加一个整数,以保持字符重复的数量。一旦有新的char进入,重置该整数。这个(我认为)最基本的方法是创建一个函数,然后一旦“重复”整数达到10(在你的情况下),就返回true,我这样做了:

public boolean isRepeated(String s) {
    char[] chars = s.toCharArray();

    char previousChar = 0;
    int repeated = 0;
    for(char c : chars) {
        if(previousChar == c) {
            repeated++;
        } else {
            repeated = 0;
        }
        if(repeated >= 10) {
            return true;
        }
        previousChar = c;
    }
    return false;
}

请记住,如果您想多次检查重复字符(如果字符串是“aaaaaaaaaa + 192 ----------”),您将不得不使用不同的方法。< / p>

答案 1 :(得分:1)

这是正则表达式的工作!

使用PatternMatcher,您可以轻松搜索重复的字符。

正则表达式为(.)\1{9,}。这很简单:匹配任何角色,捕获它然后匹配捕获的角色9次或更多次(第十个角色是你捕获的第一个角色。如果你是正则表达式的新手,请花一些时间来跟随其中一个许多很多教程解释了它们是如何工作的。

import java.util.regex.*;

public boolean containsRepeatedCharacters(String input) {
    Pattern p = Pattern.compile("(.)\\1{9,}");
    Matcher m = p.matcher(input);

    return m.find();
}