黑马程序员技术交流社区
标题:
字符串中的疑问:
[打印本页]
作者:
李万海
时间:
2013-3-13 21:48
标题:
字符串中的疑问:
class StringTest3{
public static void main(String[] args){
String s1="abewmfhelloghesa";
String s2="jnmdhellopq";
Sop(getMaxSubString(s1,s2));
}
public static void Sop(Object obj){
System.out.println(obj);
}
public static String getMaxSubString(String s1,String s2){
for(int x=0;x<s2.length();x++)
{
for(int y=0,z=s2.length()-x;z!=s2.length()+1;y++,z++)
{
String temp= s2.substring(y,z);
//Sop(temp);
if(s1.contains(temp))
return temp;
}
}
return "";
}
}
复制代码
有如上代码:在getMaxSubString方法的内层循环中z的值是随着外层循环x的值的增加而递减,为什么还要z++?为什么要用z!=s2.length()+1来控制循环结束?
作者:
孙娜
时间:
2013-3-14 12:53
z=s2.length()-x;这里是初始化z的值,只在内循环每次开始的时候执行一次;z++是每次内循环都要执行的。也就是说每次内循环开始都给z赋值(这个值是随着外层x的增加而递减),然后开始内循环,循环一次z++执行一次,直到z!=s2.length()+1为false结束。如果不用z!=s2.length()+1控制循环结束,s2.substring(y,z)取字符串时就会超出角标范围报错。
作者:
陈腾跃_2013
时间:
2013-3-14 18:33
本帖最后由 陈腾跃_2013 于 2013-3-14 18:38 编辑
举个例子:假设
String s1 = "abcd";
String s2 = "bcm";
第一次循环初始化时:(X = 0; Y = 0; Z = s2.length()-x = 3)
第14行“for”第一次:String temp = s2.substring(y,z) = "bcm"//这是伪代码
第18行“if”判断失败,回到14行“for”
——————
第14行“for”第二次:这个时候(X = 0; Y = 1; Z = 4)显然之前的z++让Z在现在为4,是不正确的。
回到第12行的第一层for循环。
之前我也有疑问这个设定的问题,后来分析发现,不管是S2中的何种子串,即使是单一字符的子串,都会在最后一次for循环中查找到(最坏情况)。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2