日期:2014-05-20  浏览次数:20698 次

for循环实现LastIndexOf 方法
这是我写的实现LastIndexOf 方法的功能[code=Java][/code]public class LastIndexOf
{
public static void main(String[] args)
{
String srcText = "cx8923ulfk;dji-abc321fckdu9a-832abc-894ofjdksau9-83791piufdsiaabcfodsa";
String str = "abc";
int hits = 0;
int idx = 0 ;
for( int i = 0; i < srcText.length(); i ++)
{
if(srcText.charAt(i) == str.charAt(hits))
{
hits += 1;
if( hits == str.length())
{
idx = i - str.length() + 1;
hits = 0;
}
}
else
hits = 0;

}
System.out.println(idx);
System.out.println(srcText.lastIndexOf("abc"));
}
} idx是我定义的最后一次出现的位置,可是循环执行到倒数第二次就完了,问题出在哪了呢?


------解决方案--------------------
cx8923ulfk;dji-abc321fckdu9a-832abc-894ofjdksau9-83791piufdsiaabcfodsa

你把最后一个abc前面的a去掉就知道是什么原因了。
------解决方案--------------------
在你的基础上帮你做了小修改,你自己想想和你之前的做法有什么区别吧
Java code
public class LastIndexOf
{
public static void main(String[] args)
{
String srcText = "cx8923ulfk;dji-abc321fckdu9a-832abc-894ofjdksau9-83791piufdsiaabcfodsa"; 
String str = "abc";
int hits = 0;
int idx = 0 ; 
for( int i = 0; i < srcText.length(); i ++)
{
if(srcText.charAt(i) == str.charAt(0))
{ //第一个字符相同
    boolean match = false;
    for (int j=1; j<str.length() && i+j<srcText.length(); j++) { //继续比较后续字符
        if (srcText.charAt(i+j) != str.charAt(j)) {break;}
        match = (j==str.length()-1); //后续字符全部一致
    }
    if (match) {idx=i;} //则获取该位置
}

} 
System.out.println(idx); 
System.out.println(srcText.lastIndexOf("abc"));
} 
}