算法练习之从String.indexOf的模拟实现开始
2014-12-25 14:24
2011 查看
String.indexOf的模拟实现,没想象中有多么高深的查找算法,就是最普通的遍历查找
思路:先找到第一个相同的字符,然后依次比较后面的字符,若都相等则表示查找成功
/** * 查找字符串pattern在str中第一次出现的位置 * @param str * @param pattern * @return */ public int firstIndexOf(String str, String pattern) { for (int i = 0; i < (str.length() - pattern.length()); i++) { int j = 0; while (j < pattern.length()) { if (str.charAt(i + j) != pattern.charAt(j)) break; j++; } if(j==pattern.length()) return i; } return -1; } /** * 查找字符串pattern在str中最后一次出现的位置 * @param str * @param pattern * @return */ public int lastIndexOf(String str, String pattern) { for (int i = str.length() - pattern.length(); i >= 0; i--) { int j = 0; while (j < pattern.length()) { if (str.charAt(i + j) != pattern.charAt(j)) break; j++; } if (j == pattern.length()) return i; } return -1; } /** * 查找字符串pattern在str中出现的位置 * @param str * @param pattern * @return */ public List<Integer> indexOf(String str, String pattern) { List<Integer> indexs = new ArrayList<Integer>(); for (int i = 0; i < (str.length() - pattern.length()); i++) { int j = 0; while (j < pattern.length()) { if (str.charAt(i + j) != pattern.charAt(j)) break; j++; } if (j == pattern.length()) indexs.add(i); } return indexs; }
同样更常用的String.contains方法实际上就是调用的String.indexOf实现
/** * 判断字符串pattern在str中是否存在 * @param str * @param pattern * @return */ public boolean contains(String str, String pattern) { return firstIndexOf(str, pattern) != -1; }
相关文章推荐
- 从头开始学算法:考研机试题练习(C/C++)--入门模拟
- C#实现String.IndexOf功能 查找字符串
- PyCon 2011 - Hidden Treasures of the Python Standard Library - 模拟hmac摘要算法的实现
- 问题解决:javax.servlet.jsp.el.ELException: The "." operator was supplied with an index value of type "java.lang.String" to be applie
- A*算法学习 附Javascript 算法实现练习
- C#实现遗传算法,模拟花朵的进化。
- indexOf(String.indexOf 方法)
- 通过重载类的成员操作符来实现对string 类的模拟
- 生成web service client时Error generating services (String index out of range: 3)
- 开始练习用RichFaces实现进销存系统前台界面
- 关于java.lang.String中的public int lastIndexOf(String,int)
- 模拟实现死亡之Ping(Ping of death)
- [翻译] Effective C++, 3rd Edition, Item 38: 通过 composition(复合)模拟 "has-a"(有一个)或 "is-implemented-in-terms-of"(是根据……实现的)
- 学习C#从俄罗斯方块开始(二)俄罗斯方块的规则和算法的简单实现
- ASP.NET中String.IndexOf 方法的使用
- 时间片轮转算法和优先级调度算法 C语言模拟实现
- 用lastIndexOf方法返回String对象内最后一次出现子字符串的字符位置的示例
- String index out of range: -1
- String中的lastIndexOf(String)
- Indexof String By Byte[]