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

时间:2015-10-09 02:00:51

标签: java regex string expression

给定一个输入字符串,检查该字符串是否有char' r' &安培; '克'分开正好是5个字符。 对于以下代码,错误是String索引超出范围错误。 无法弄清楚什么是错的

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

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;
    }
}

主要课程:

import java.util.*;
public class classa 
{
public static void main(String[] args)
{

    String a = new String();
    int count;
    Scanner sc = new Scanner(System.in);
    System.out.println("Enter a string: ");
    a= sc.nextLine();
    classb x = new classb();
    count=x.match(a);
    if(count==1)
        System.out.println("Pattern found ");
    else if(count==0)
        System.out.println("Pattern not found ");

}
}

2 个答案:

答案 0 :(得分:0)

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

r表示模式以r开头,而g表示模式以g结尾。 .表示任何字符,{5}表示正好有5个(在这种情况下为任何字符)。

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

答案 1 :(得分:0)

代码中的根本问题是:

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

你有一个循环用于增加J的j - 但在该循环中你再次增加j。在此之下,您在索引中使用j + 6并且您没有检查j + 6是否太长。所以你反复修改j并检查6个字符,而不检查它们是否在边界内。

我首先在s.length() - 6处停止你的for循环。如果一个r或g序列在那些最后的位置开始它无法完成,所以不需要检查它们 - 然后你的j + 6逻辑将工作而不会爆炸。