/*
使用函数寻找字符串在指定字符串第一次出现的位置,
如果有就返回位置值
如果没有就返回-1
*/
public class StringSearch {
public static void main(String[] args) {
String g = "abcdefghijjlmnopqrstuvwxyz";
String l = "rst";
System.out.println(g.substring(,l.length()));
System.out.println(g.indexOf(l)+1);
System.out.println("left to right第一次出现rst的位置\t" + strSearch(g,l));
}

public static int strSearch(String a, String b) {
int x = a.length();
int y = b.length();
int pos = 0;
String s = "";
for(int m=0;m<x-y+1;m++) {
s = a.substring(m,m+y);
if((s.equals(b))==true) {
pos = m+1;
} else {
pos = -1;
}
/*
这里如果没有else语句,可以出现正常结果,一旦加上,始终返回是-1
*/
}
return pos;
}
}

解决方案 »

  1.   


    for(int m=0;m <x-y+1;m++) { 
    s = a.substring(m,m+y); 
    if((s.equals(b))==true) { 
    pos = m+1; 
    break;//加这一句
    } else { 
    pos = -1; 

    /* 
    这里如果没有else语句,可以出现正常结果,一旦加上,始终返回是-1 
    */ 
      

  2.   

    今天去参加一个笔试,让写个查找函数,本来indexOf就可以搞定,当时只想到substring了,回来又敲了一遍,发现,这个else语句很是影响结果的,如果我把else语句注释掉,结果正确,如果不注释掉,结果始终是-1,我分析了好几次,程序逻辑有
    问题没?请高手指教一下,小问题难倒英雄汗呀。。
      

  3.   

    加了break可以了。关键是 我if条件设置好了呀,如果true,else就不会执行了吧?
    继续请教
      

  4.   

    else不执行for还要继续走下去撒,后面的if的条件就不一是是true了,就有可能执行else了
    LZ参加笔试后头脑晕了
    好好休息下再想就好了
      

  5.   

    明白了。 短的字符串不一定就会出现在长的字符串最后,因此,他找到以后还会继续for一下,呵呵。确实有点晕,幸亏大家
    帮助了一下,呵呵。使用break可以立即退出循环的,这个明白了。
    笔试时,让写一了大堆sql语句,逻辑关系又复杂,最后又来了将近十页的MBTI性格测试,真是有点晕。呵啊。不过现在好了。谢谢