你的问题出在
if( s1.charAt(i+j)!=s2.charAt(j))
    flag=0;
    break;
应该改为:
if( s1.charAt(i+j)!=s2.charAt(j)){
flag=0;
break;
}
否则的话,只要判断S2中第一个字母"j"在S1中存在,就会打印出"j"及其后面的三个字母.

解决方案 »

  1.   

    public class Searching{
    public static void main(String[] args){
    String s1="asdf(java)asd(java)(java)jvaasdjav";
    String s2="java";
    int i,j,flag;
    for(i=0;i<s1.length()-s2.length();i++){
    flag=1;
    for(j=0;j<s2.length();j++){
    if( s1.charAt(i+j)!=s2.charAt(j))
    flag=0;
    //break;
    }
    if(flag==1)
    System.out.println("find  at "+i+" :"+s1.charAt(i)+s1.charAt(i+1)+s1.charAt(i+2)
    +s1.charAt(i+3));
    }
    }
    }
      

  2.   

    出在BREAK,使循环每次J=0那么s2.charAt(j) -> s2.charAt(0)="j" ,也就是说只要s1.charAt(i+j)="j",就打印!
      

  3.   

    public class Searching{
    public static void main(String[] args){
    String s1="asdf(java)asd(java)(java)jvaasdjav";
    String s2="java";
    int i,j,flag;
    for(i=0;i<s1.length()-s2.length();i++){
    flag=1;
    for(j=0;j<s2.length();j++){
    if( s1.charAt(i+j)!=s2.charAt(j))
    flag=0;
    }
    if(flag==1)
    System.out.println("find  at "+i+" :"+s1.substring(i,i+4));
    }
    }
    }推荐用substring方法做输出
      

  4.   

    谢谢大家,一时疏忽,哈哈!BREAK是没错问题,出在我漏了{ }, 谢谢,