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中出现的次数,很简单,将上面的程序稍加改造一下就可以。