【问题标题】:String having r & g separated by 5 characters! (Error:String index out of range error)r & g 由 5 个字符分隔的字符串! (错误:字符串索引超出范围错误)
【发布时间】:2015-10-09 02:00:50
【问题描述】:

给定一个输入字符串,检查字符串是否有 char '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;
    }
}

主类:

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 ");

}
}

【问题讨论】:

    标签: java regex string expression


    【解决方案1】:

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

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

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

    【讨论】:

    • 我当然可以。但是问题也说你不能使用直接函数来解决。
    • @AishwaryaR 啊,我明白了。在这种情况下,您可以将String 与正则表达式(?=r) 分开,以便r 保留在数组中的每个Strings 中,并遍历它,检查第7 个字符是否为@987654333 @.
    【解决方案2】:

    您的代码中的根本问题是:

            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 逻辑将起作用并且不会崩溃。

    【讨论】:

    • 是的,绝对正确。完成这些编辑...但对于上面的代码,即使它存在,它仍然无法识别模式。未达到计数器语句。
    猜你喜欢
    • 2018-04-06
    • 2013-09-25
    • 2015-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-01
    • 2021-05-16
    相关资源
    最近更新 更多