示例:1.如果我通过“ BAAABA”,则应返回1,因为我们看到“ A”立即重复3次。2.当我通过“ BAABAA”时,应该返回0,因为我们没有任何字母立即重复3次。3.当我通过“ BBBAAABBAA”时,应该返回2。
class Coddersclub{
public static void main (String[] args) throws java.lang.Exception
{
String input="Your String";
int result=0;
int matchingindex=0;
char[] iteratingArray=input.toCharArray();
for (int matchThisTo=0;matchThisTo < iteratingArray.length;matchThisTo++)
{
for(int ThisMatch=matchThisTo;ThisMatch < iteratingArray.length;ThisMatch++)
{
if(matchingindex==3)
{
matchingindex=0;
result=result+1;
}
if(iteratingArray[matchThisTo] == iteratingArray[ThisMatch])
{
matchingindex=matchingindex+1;
break;
}
else
{
matchingindex=0;
}
}
}
System.out.println(result);
}}
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class SOTest {
final static String regex = "(\\w)\\1*";
public static void main(String[] args) {
final String string = "aaabbccc";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
String group = matcher.group(0);
if(group.length()==3)
System.out.println("Full match: " + group+" length :: "+group.length());
}
}
}
输出::
Full match: aaa length :: 3
Full match: ccc length :: 3
您的初始代码大部分是正确的,您的逻辑也不错。您只需要在else语句上移动break语句:
if (iteratingArray[matchThisTo] == iteratingArray[ThisMatch]) {
matchingindex = matchingindex + 1;
} else {
matchingindex = 0;
break;
}
根据Java代码,我也将ThisMatch
重命名为小写:thisMatch
。
进展顺利。