黑马程序员技术交流社区
标题:
关于String 字符串练习的第二个疑问
[打印本页]
作者:
郭利超
时间:
2013-3-18 22:54
标题:
关于String 字符串练习的第二个疑问
本帖最后由 郭利超 于 2013-3-19 08:05 编辑
/*
4,获取两个字符串中最大相同子串。第一个动作:将短的那个串进行长度一次递减的子串打印。
"abcwerthelloyuiodef"
"cvhellobnm"
思路:
1,将短的那个子串按照长度递减的方式获取到。
2,将每获取到的子串去长串中判断是否包含,
如果包含,已经找到!。
*/
class StringTest3
{
/*
练习四。
*/
public static String getMaxSubString(String s1,String s2)
{
String max = "",min = "";
max = (s1.length()>s2.length())?s1: s2;
min = (max==s1)?s2: s1;
// sop("max="+max+"...min="+min);
for(int x=0; x<min.length(); x++)
{
for(int y=0,z=min.length()-x; z!=min.length()+1; y++,z++)
{
String temp = min.substring(y,z);
sop(temp);
if(max.contains(temp))//if(s1.indexOf(temp)!=-1)
return temp;
}
}
return "";
}
public static void main(String[] args)
{
String s1 = "ab";
String s2 = "cvhellobnm";
sop(getMaxSubString(s2,s1));
}
public static void sop(String str)
{
System.out.println(str);
}
}
复制代码
下面的语句该怎么读(运行过程)
for(int y=0,z=min.length()-x; z!=min.length()+1; y++,z++)
{
String temp = min.substring(y,z);
还有最后为什么需要返回 return "";
拜托大神了
作者:
郭利超
时间:
2013-3-18 22:55
自己占沙发 然后睡觉啦! 大神辛苦!
作者:
飞天小猪猪
时间:
2013-3-18 23:23
本帖最后由 HM朱俊 于 2013-3-18 23:27 编辑
for(int y=0,z=min.length()-x; z!=min.length()+1; y++,z++)
{
String temp = min.substring(y,z);
是选取min字符串中从y角标到z角标的子字符串。所以for循环刚开始时是从y=0也就是从头开始取到z=length()-x结束,而外层for循环刚开始时是x=0,那么内层循环z的值其实就是该字符串的总长度,即取得是他本身,循环一遍后,然后y++,z++,而z++条件不满足,内循环结束。紧接着外循环x++,内循环里去的值就是min字符串总长度少一位的两个子字符串,然后依次,外循环转一圈,内循环就取出min字符串总长度少一位的子字符串。直到取完所有的子字符串。
返回return是因为该方法前有String类型标识,所以需要返回值。但是在for循环中已经返回了需要的字符串,所以外面返回一个空值就可以了。
作者:
itserious
时间:
2013-3-18 23:46
for (int y = 0, z = min.length() - x; z != min.length() + 1; y++, z++) {
/*
* 下面是列的内循环的流程。
* 1. y=0,
* 2. z=min.length()-x //用来每进行一次外循环,最小的字符串长度减1;
* 3. String temp = min.substring(y, z); //第一次从字符串中取出min.substring(0,3),所以取出来还是“ab”。
* 4. sop(temp);
* 5. if()
* 6. z != min.length() + 1; //主要用于控制min.substring(y,z);因为这个方法再取子串的时候,
* 是包括头,不包括尾的,
* 7. y++
* 8 .z++
* 9 重复上面的流程, 直到第一次比较结速。
* */
还有最后为什么需要返回 return "";?
是因为你的方法必须返回一个字符串,当你的最大子串不存在的时候,你只能返回一个空来占位。
作者:
李尧
时间:
2013-3-18 23:52
因为你的方法 public static String getMaxSubString(String s1,String s2){} 要求返回值为String.虽然在for循环中已经 return temp;但是,如果你不返回return "";编译器是不会通过编译的.
为什么呢?因为对编译器来说,它只看语法,它要确定你有返回值,这是从安全的角度考虑的.
来看你的代码:
for(int x=0; x<min.length(); x++)
{
for(int y=0,z=min.length()-x; z!=min.length()+1; y++,z++)
{
String temp = min.substring(y,z);
sop(temp);
if(max.contains(temp))//if(s1.indexOf(temp)!=-1)
return temp;
}
}
return "";
}
for循环中的return temp 是写在if后的,编译器不能确定这个return是否一定会被执行,所以你需要给它一个确定的返回值.而我们自己知道已经返回了一个temp,所以需要return一个"";来通过编译.
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2