1、首先说明一下题目:给定两个字符串str1和str2,找到str2在str1第一次出现的位置。例如str1=“lizhongyi” str2=“zhong” str2在str1第一次出现的位置是2(从0开始)。
2、先抛开一切语言,单纯从算法的角度考虑,这道题该怎么做呢?(这种独立思考的过程很重要,要不断的训练自己)
思路一:在str1中找str2中第一个字符出现的位置,然后再一个字符一个字符的比较str1和str2,如果到str2结束都相等,则找到str2在str1中第一次出现的位置。否则再在str1中找str2的第一字符出现的位置。。。。这种思路很好理解,也很好想到,可是如果用代码实现不太容易或者有些复杂。
思路二:从str1中截取和str2长度一样的字符串,和str2比较,相等即找到,不相等再截取一个新的字符串。直到找到或找不到。(这种思路很好,而且从计算机的角度考虑也很好实现)
3、Java实现代码:
package com.sailang.string;
public class StringTest
{
public static void main(String[] args)
{
String str1 = "lizhongyizhongyi";
String str2 = "zhong";
System.out.println(findFirstPositionOfSubString(str1, str2));
}
/**
* 找到字符串str2在字符串str1中第一次出现的位置,找不到返回-1
* @param str1
* @param str2
* @return
*/
public static int findFirstPositionOfSubString(String str1, String str2)
{
int offset = 0;
String substr = null;
if((str1 == null) || (str2 == null) || (str1.length() < str2.length()))
{
return -1;
}
else
{
while(offset <= (str1.length() - str2.length()))
{
substr = String.copyValueOf(str1.toCharArray(), offset, str2.length());
if(substr.equals(str2))
{
return offset;
}
offset ++;
}
return -1;
}
}
}
4、统计str2在str1中出现的次数,很简单,将上面的程序稍加改造一下就可以。