java 求子字符串问题

R-I-P 2013-03-09 10:51:54
如题:cd 是abcd 的子字符串;ac不是abcd的子字符串;
又如
isSubString("The", "The cat in the hat.") is true
isSubString("hat.", "The cat in the hat.") is true

现在我写了一个Search类

public class Search {
//定义计数器
private int i = 0 ;
private int j = 0 ;
//第一个字母
private boolean first ;

public boolean searchChar(String target,String source){
for(;j<source.length() - target.length() + 1;j++){
if(target.charAt(0) == source.charAt(j) ){
first = true;
break;
}
}

if( first == true ){
if(target.length() == 1){
return true;
}
else{
for(i=1,j++;i<target.length();i++,j++){
if(target.charAt(i) != source.charAt(j)){
return false;
}
}
return true;
}
}
else{
return false;
}
}
}


但是对于isSubString("hat.", "The cat in the hat.") is true
hat 对于后者 因为有两个h,所以无法实现,那么我的代码该如何修改?
...全文
279 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
beiouwolf 2013-03-12
  • 打赏
  • 举报
回复
话说 这是作业吗?要求不使用jdk本身方法? 如果不是的话... public boolean isSubString(String str,String src) { return src != null && src.indexOf(str) != -1; }
Mourinho 2013-03-11
  • 打赏
  • 举报
回复

public class Test {
	public static void main(String[] args) {
		Search search = new Search();
		System.out.println(search.isSubString("The", "The cat in the hat."));
		System.out.println(search.isSubString("hat.", "The cat in the hat."));
		System.out.println(search.isSubString("cat in th", "The cat in the hat."));
	}
}

class Search {
	public boolean isSubString(String str, String src) {
		int index = 0;
		while (index < src.length()) {
			int lastIndex = index;
			for (int i = 0; i < str.length();++i) {
				if (str.charAt(i) != src.charAt(index + i)) {
					index += (i + 1);
					break;
				}
			}
			if (lastIndex == index) {
				return true;
			}
		}
		return false;
	}
}

R-I-P 2013-03-10
  • 打赏
  • 举报
回复
问题已解决,只是使用了length()和charAt(),下面是代码,欢迎测试

public class Search {
	//定义计数器
	private int i = 0 ;
	private int j = 0 ;
	//临时存储
	private int a = 0 ;
	private int b = 0 ;
	//循环计数器
	private int count = 0 ;
	
	public boolean searchChar(String target,String source){
			for(;j<source.length() - target.length() + 1;j++){
				if( target.charAt(0) == source.charAt(j)){
					a = i+1;
					b = j+1;
					
					
					while ( a < target.length()   &&   target.charAt(a) == source.charAt(b)){
						a++;
						b++;
						count++;
					}
					
					if(count == target.length()-1 ){
						return true;
					}
					else{
						continue;
					}
				}
			}
		return false;	
	}
}
z2010490051 2013-03-10
  • 打赏
  • 举报
回复
public class Test { /** * @param args */ public static void main(String[] args) { new Test().match("hat", "the cat in the hat"); } public void match(String reg, String strs) { String[] str = strs.split(" "); for (String s : str) { if (s.matches(reg)) { System.out.println("true"); break; } } } }
ZZZ5512536 2013-03-10
  • 打赏
  • 举报
回复
不能用string.contains(substring)?
bluemoby 2013-03-09
  • 打赏
  • 举报
回复
我写了一个,你可以参考一下

public class Test {

	public static boolean isSubString(String target,String source){
		//每次前进一个字符判断
		for(int i=0,j=source.length(),k=target.length();i+k<=j;i++){
			//取出一个子串
			String current=source.substring(i, i+k);
			//如果子串等于target则证明是子字符串
			if(current.equals(target)){
				return true;
			}
		}
		return false;
	}
	public static void main(String[] args) {
		System.out.println(isSubString("The", "The cat in the hat."));
		System.out.println(isSubString("hat.", "The cat in the hat."));
	}

}
而且String类中本身有子字符串的判断方法,contains()
22春"计算机科学与技术"专业《计算方法》在线作业答案参考 1. 下列叙述中正确的是( )。 A.线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的 B.线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构 C.线性表的链式存储结构所需要的存储空间一般要少于顺序存储结构 D.上述三种说法都不对 参考答案:B 2. 设变量定义为char s[]="hello",则数组s中有6个元素。( ) A.错误 B.正确 参考答案:B 3. 一个有n个结点的图,最多有( )个连通分量。 A.0 B.1 C.n-1 D.n 参考答案:D 4. 高精度计算时可以用字符串来存储运算结果。( ) A.错误 B.正确 参考答案:B 5. 字符串的结束标记是( )。 A.0' B.' ' C.'\0' D.'\n' 参考答案:C 22春"计算机科学与技术"专业《计算方法》在线作业含答案参考10全文共4页,当前为第1页。6. 列主元素消元法不是直接法中常用的方法。( ) A.正确 B.错误 参考答案:B 22春"计算机科学与技术"专业《计算方法》在线作业含答案参考10全文共4页,当前为第1页。 7. 两个字符串中的字符个数相同时才能进行字符串大小的比较。( ) A.错误 B.正确 参考答案:A 8. 下列说法错误的是( ) A.使用高级计算机语言,如C、C++、Java,编写的程序,都需要经过编译器编译或解释,才能转化成机器能够识别并能执行的二进制代码 B.如何一步步的跟踪代码,找到问题,搞明白为何程序不能正常运行,这个过程称为调试程序 C.自动化的工具同样也能够帮助你跟踪程序,尤其当程序很复杂时效果更加明显,这种工具叫做调试器 D.调试器不能解决程序中出现的问题 参考答案:D 9. strcmp( )函数用来( )。 A.字符串长度 B.比较字符 C.串 D.字符串拷贝 参考答案:B 10. scanf( )、printf( )可以输入输出几个字符串。( ) A.错误 B.正确 参考答案:B 22春"计算机科学与技术"专业《计算方法》在线作业含答案参考10全文共4页,当前为第2页。11. 线性方程组的解法大致可以分为( )。 线性方程组的解法大致可以分为( )。 A、直接法和间接法 B、直接法和替代法 C、直接法和迭代法 D、间接法和迭代法 参考答案:C 22春"计算机科学与技术"专业《计算方法》在线作业含答案参考10全文共4页,当前为第2页。 12. 非线性结构的逻辑特征是一个结点可能有多个直接前趋和直接后继。( ) A.错误 B.正确 参考答案:B 13. 线性插值虽然只利用了两个节点上的信息,但是精度却比较高。( ) 线性插值虽然只利用了两个节点上的信息,但是精度却比较高。( ) A、错误 B、正确 参考答案:A 14. 按"先进后出"原则组织数据的数据结构是队列。( ) A.错误 B.正确 参考答案:A 15. tolower( )函数用来( )。 A.小写字母转换为大写字母 B.大写字母转换为小写字母 C.小写字母转换为大写字母,同时大写字母转换为小写字母 D.判断大小写 参考答案:B 16. 简单选择排序和冒泡排序都是一种不稳定排序方法。( ) A.错误 B.正确 参考答案:A 22春"计算机科学与技术"专业《计算方法》在线作业含答案参考10全文共4页,当前为第3页。17. 利用无穷递推过程的算法,只需要建立计算公式,不需要解决精度控制范围。( ) 利用无穷递推过程的算法,只需要建立计算公式,不需要解决精度控制范围。( ) A、错误 B、正确 参考答案:A 22春"计算机科学与技术"专业《计算方法》在线作业含答案参考10全文共4页,当前为第3页。 18. 高斯消去法是对增广矩阵(A"b)进行一系列的初等行变换。( ) A.正确 B.错误 参考答案:A 19. 微分和积分是一对互逆的数学运算。( ) 微分和积分是一对互逆的数学运算。( ) A、错误 B、正确 参考答案:B 22春"计算机科学与技术"专业《计算方法》在线作业含答案参考10全文共4页,当前为第4页。20. 在深度为7的满二叉树中,度为2的结点个数为64。( ) A.错误 B.正确 参考答案:A 22春"计算机科学与技术"专业《计算方法》在线作业含答案参考10全文共4页,当前为第4页。 22春"计算机科学与技术"专业《计算方法》在线作业含答案参考10

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧