Java 具有r&;g由5个字符分隔!(错误:字符串索引超出范围错误)

Java 具有r&;g由5个字符分隔!(错误:字符串索引超出范围错误),java,regex,string,expression,Java,Regex,String,Expression,给定一个输入字符串,请检查该字符串的字符“r”和“g”之间的间隔是否正好为5个字符。 对于以下代码,错误为字符串索引超出范围错误。 搞不清楚出了什么问题 我的类代码具有检查模式的函数: public class classb { String s = new String(); public int match(String str){ int counter = 0; int j; s=str; for(j=0;j<

给定一个输入字符串,请检查该字符串的字符“r”和“g”之间的间隔是否正好为5个字符。 对于以下代码,错误为字符串索引超出范围错误。 搞不清楚出了什么问题

我的类代码具有检查模式的函数:

public class classb {
String s = new String();

   public int match(String str){
        int counter = 0;
        int j;
        s=str;
        for(j=0;j<(s.length()-6);j++){
            if(s.charAt(j)=='r' && s.charAt(j+6)=='g') {
                counter=1;
                break;
            }
            if(s.charAt(j)=='g' && s.charAt(j+6)=='r'){
                counter=1;
                break;
            }

            while(s.charAt(j)!='r' || s.charAt(j)!='g'){
                if(j<(s.length()-6))
                    j++;
                else
                    break;
            }

        }

        return counter;
    }
}

您可以使用正则表达式来解决这个问题,
r.{5}g

r
表示模式以
r
开始,
g
表示模式以
g
结束。
表示任意字符,
{5}
表示正好有5个字符(在本例中为任意字符)


为了实现这一点,您只需使用方法
String#matches(“r.{5}g”)
您可以使用正则表达式来解决这个问题,
r.{5}g

r
表示模式以
r
开始,
g
表示模式以
g
结束。
表示任意字符,
{5}
表示正好有5个字符(在本例中为任意字符)


要实现这一点,您只需使用方法
String#matches(“r.{5}g”)

代码中的根本问题是:

        for(j=0;j<s.length();j++){
        while(s.charAt(j)!='r' || s.charAt(j)!='g')
            j++;

for(j=0;j代码中的根本问题是:

        for(j=0;j<s.length();j++){
        while(s.charAt(j)!='r' || s.charAt(j)!='g')
            j++;

for(j=0;jI当然可以。但问题还说你不能用直接函数来解决。@AishwaryaR啊,我明白了。在这种情况下,你可以用regex
(?=r)拆分
字符串
,使
r
停留在数组中的每个
字符串中,并对其进行迭代,检查第7个字符是否是
g
。我当然可以。但问题还说您不能使用直接函数来解决。@AishwaryaR,我明白了。在这种情况下,您可以用正则表达式
(?=r)拆分
字符串
,使
r
停留在数组中的每个
字符串中,并对其进行迭代,检查第7个字符是否为
g
。是的,绝对正确。完成这些编辑后……但对于上面的代码,即使模式存在,也无法识别。未达到反语句。是的,绝对正确已经完成了这些编辑…但是对于上面的代码,它仍然无法识别模式,即使它存在。未到达计数器语句。