黑马程序员技术交流社区

标题: 求助 这道题怎么解 [打印本页]

作者: mirror    时间: 2014-7-27 15:57
标题: 求助 这道题怎么解
可以使用String类中的indexOf方法检测一个字符串是否是另一个字符串的子串。编写自己的方法实现这个功能。编写一个程序,提示用户输入两个字符串,检测第一个字符串是否是第二个字符串的子串
作者: fantacyleo    时间: 2014-7-27 16:57
  1. public class StringIndexOf {

  2.         public static void main(String[] args) {
  3.                 // TODO Auto-generated method stub
  4.                 String s = "Hello";
  5.                 System.out.println(indexOf(s, "ello"));
  6.                 System.out.println(indexOf(s, "eklo"));

  7.         }
  8.        
  9.         public static boolean indexOf(String src, String target) {
  10.                 if (src == null || target == null)
  11.                         return false;
  12.                 int lenSrc = src.length();
  13.                 int lenTarget = target.length();
  14.                
  15.                 if (lenSrc < lenTarget)
  16.                         return false;
  17.                
  18.                 // 从src字符串的第i个字符开始,看是否能匹配target字符串。
  19.                 // i的范围可以是[0, lenSrc - 1],当然也可以略作优化,要求src从i开始的子串长度不小于target的长度
  20.                 Outer:
  21.                 for (int i = 0; lenSrc - i >= lenTarget; i++) {
  22.                         // 匹配target字符串的首字符后,进入内层循环匹配target字符串的剩余字符
  23.                         if (src.charAt(i) == target.charAt(0)) {
  24.                                 int j = 1;
  25.                                 while (j < lenTarget) {
  26.                                         // 有一个字符不匹配就重新返回外层循环,从src的第i+1个字符开始尝试匹配
  27.                                         if (src.charAt(i + j) != target.charAt(j))
  28.                                                 continue Outer;
  29.                                         j++;
  30.                                 }
  31.                                 // 从src的第i个字符开始完全匹配target,返回true
  32.                                 return true;
  33.                         }
  34.                 }
  35.                 // 从src的每个字符开始都无法匹配target,返回false
  36.                 return false;
  37.         }
  38. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2