判断一个字符串是否包含另一个字符串(用java但是不能用index()这个函数)
来源:互联网 发布:海兴电力嵌入式软件 编辑:程序博客网 时间:2024/06/08 11:44
目录:
一.方法介绍
二.图示意
三.源代码
一.方法介绍
判断一个字符串str1是否包含另一个字符串str2:
1.取str2的第一个字符一次和str1的字符依次比较,知道找到相等的字符为止或者找完整个str1的length.
模仿的判断一个字符串是否包含另一个字符串的源码:
总结:面对这样的算法,我们第一反应是要先找到子串为一样的时候,才返回包含,其它条件都是不包含,然后就是先找源字符串里面第一个和子字符串里面的第一个相等,如果找不到就直接结束,既不包含,如果有的话,再找依次增加判断,如果最后指针移动了子串的长度,就说明包含,要记得最后
一.方法介绍
二.图示意
三.源代码
一.方法介绍
判断一个字符串str1是否包含另一个字符串str2:
1.取str2的第一个字符一次和str1的字符依次比较,知道找到相等的字符为止或者找完整个str1的length.
2.当找到相等的字符后,在str2长度内str2与str1依次进行比较
二.图示意
三.源代码
JDK中java.lang.String.indexOf(char[], int, int, char[], int, int, int)源码:
/** * Code shared by String and StringBuffer to do searches. The * source is the character array being searched, and the target * is the string being searched for. * * @param source the characters being searched. * @param sourceOffset offset of the source string. * @param sourceCount count of the source string. * @param target the characters being searched for. * @param targetOffset offset of the target string. * @param targetCount count of the target string. * @param fromIndex the index to begin searching from. */ static int indexOf(char[] source, int sourceOffset, int sourceCount, char[] target, int targetOffset, int targetCount, int fromIndex) {if (fromIndex >= sourceCount) { return (targetCount == 0 ? sourceCount : -1);} if (fromIndex < 0) { fromIndex = 0; }if (targetCount == 0) { return fromIndex;} char first = target[targetOffset]; int max = sourceOffset + (sourceCount - targetCount); for (int i = sourceOffset + fromIndex; i <= max; i++) { /* Look for first character. */ if (source[i] != first) { while (++i <= max && source[i] != first); } /* Found first character, now look at the rest of v2 */ if (i <= max) { int j = i + 1; int end = j + targetCount - 1; for (int k = targetOffset + 1; j < end && source[j] == target[k]; j++, k++); if (j == end) { /* Found whole string. */ return i - sourceOffset; } } } return -1; }
模仿的判断一个字符串是否包含另一个字符串的源码:
public static String compareDoubleString(String source, String target) {// 分别获取两个字符串的长度,因为后面会用到int sourceLength = source.length();int targetLength = target.length();// 获取目标的第一个字符char firstTargetChar = target.charAt(0);// 最多比较的次数int max = sourceLength - targetLength;// 如果第一个不相等,那么一直找到相等的那一个或者找完都不能找到int sourceOffset = -1;while (++sourceOffset < max&& source.charAt(sourceOffset) != firstTargetChar) {}if (sourceOffset <= max) {// 设置新的源索引int newSourceOffset = sourceOffset + 1;// 剩余的比较长度,也就是在offset上增加targetLengthint leaveLength = newSourceOffset + targetLength - 1;int targetOffset = 1;// 连续的比较,条件不符合的时候跳出for (; newSourceOffset < leaveLength&& source.charAt(newSourceOffset) == target.charAt(targetOffset); newSourceOffset++, targetOffset++);if (newSourceOffset == leaveLength) {return "包含:source包含target字符串!";}}return "不包含:source不包含target字符串!";}
总结:面对这样的算法,我们第一反应是要先找到子串为一样的时候,才返回包含,其它条件都是不包含,然后就是先找源字符串里面第一个和子字符串里面的第一个相等,如果找不到就直接结束,既不包含,如果有的话,再找依次增加判断,如果最后指针移动了子串的长度,就说明包含,要记得最后
newSourceOffset++了一次,所以可以和leaveLength相等。
0 0
- 判断一个字符串是否包含另一个字符串(用java但是不能用index()这个函数)
- java 判断一个字符串是否包含另一个字符串
- C#中,怎么判断一个字符串包含是否不包含另一个字符串
- js--判断--判断一个字符串是否包含另一个字符串
- c语言中判断一个字符串是否包含另一个字符串
- php怎样判断一个字符串是否包含另一个字符串?
- 模仿String.indexOf,判断一个字符串是否包含另一个字符串
- php怎样判断一个字符串是否包含另一个字符串strpos()
- 判断一个字符串里是否包含了另一个字符串
- php如何判断一个字符串是否包含另一个字符串
- 判断一个字符串中是否包含另一个字符串
- shell判断一个字符串是否包含另一个字符串
- php如何判断一个字符串是否包含另一个字符串
- 算法:判断一个字符串是否包含另一个字符串
- php之substr_count判断一个字符串是否包含另一个字符串
- php如何判断一个字符串是否包含另一个字符串
- php怎样判断一个字符串是否包含另一个字符串strpos()
- [数据库][SQLServer]判断一个字符串中是否包含另一个字符串
- The C Programming Language——第一章笔记
- somedargon@0.0.0.0's password:
- js常见小程序(一)
- opencv之win7+vs2013配置
- <hr>标签,添加水平横线
- 判断一个字符串是否包含另一个字符串(用java但是不能用index()这个函数)
- iOS中Block的引用循环问题 (ARC & non-ARC)
- 黑马程序员——9.正则表达式(爬虫)
- C# 读取app.config配置文件 节点键值,提示 "System.TypeInitializationException 类型初始值设定项引发异常" 错误的解决方案
- java 将对象写入文件
- <address>标签,为网页加入地址信息
- IOS Android 手机助手原理以及源码(Android 手机自动识别 二)
- OC动态字典和数组演示demo
- Ember.js 入门指南——控制器(controller)