给定一个输入字符串,检查该字符串是否有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 ");
}
}
答案 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逻辑将工作而不会爆炸。