作为一个初学Java的小菜鸟,每天过着3点一线的生活,每天12个小时的学习虽然辛苦,但是收获确实巨大的,每次编出一个像样点的程序,自己都会觉得非 常的开心,下面就给大家分享一下,我在Java学习中遇到的困难和解决问题的方法。
如题,本次小子在做题库时候遇到了这个问题,思考了好一会才有所想法,后来修修改改,经过一个多小时才把这题给搞定(不得不说自己的水平很菜啊,不过 我们才刚学到数组,字符串是自己钻研的)。
这个题目最大的困难之处在于如何找到所有相同的字符串,然后进行比较,所以解决这个问题的思路就是如下这样。
首先,要比较两个字符串的大小,通过大的字符串去indexof小的字符串,这样才能更精确吗,相信这个步骤大家都会,我就不做赘述了。
然后,我们要通过双循环来查找相同的字符串,在做这个的时候,首先我们先查下Java的API,String类型里面有一个 substring(int beginIndex, int endIndex),调用这个函数,会返回一个新字符串,它是此字符串的一个子字符串。,学会了这个方法,我们就不难写出以下代码。
String[] str = new String[50]; //新建一个字符串数组,这个可以根据你输入的字符长度进行改变
int n = 0;
for (int i = 0; i < s2.length(); i++) {
for (int j = i + 1; j <= s2.length(); j++) {
if (s1.indexOf(s2.substring(i, j)) != -1) { //循环遍历相同的字符串
str[n] = s2.substring(i, j);
n++;
}
}
}
此段代码中if (s1.indexOf(s2.substring(i, j)) != -1)为核心代码,因为本文面向的都是和我一样的小菜,所以就和大家具体说说,substirng 不断通过双循环返回各个长度的s2的子字符串,s1通过indexof的方法去查找s1中有没有和返回的s2的子字符串相同的字符串,如果找到相同的就把 它放到我们已经建好的字符串数组str中。
然后我们把找到的相同字符串进行长度的比较,这个相信给小菜也都会,代码如下:
int maxLen = str[0].length(); //假设第一个值为最大值
for (int i = 1; i < n; i++) {
if (str[i].length() >= maxLen)
maxLen = str[i].length();
}
通过字符串长度的比较,这样我们就可以把最大的相同字符串给找出来了,登登登~!~!~!
剩下的就是输出了,同样把代码贴出来。
for (int i = 0; i < n; i++) {
if (str[i].length() == maxLen)
System.out.println(str[i]);
}
如果各位觉得我赘述的过多,想要直接要代码的话,本小子同样乐于分享,把完整的代码贴给大家,(已经实现过了,可以直接用哦~)嘿嘿,本篇文章是本小 子第一次发表技术类的帖子,虽然题目很简单,但是乐于分享才是我们程序员极客精神的体现吗~如有不足,请各位看官尽情提出埃
完整代码:
public class Test {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
String a=in.next();
String b=in.next();
subStr(a, b);
}
public static void subStr(String s1, String s2) {
String[] str = new String[50];
int n = 0;
for (int i = 0; i < s2.length(); i++) {
for (int j = i + 1; j <= s2.length(); j++) {
if (s1.indexOf(s2.substring(i, j)) != -1) {
str[n] = s2.substring(i, j);
n++;
}
}
}
int maxLen = str[0].length();
for (int i = 1; i < n; i++) {
if (str[i].length() >= maxLen)
maxLen = str[i].length();
}
for (int i = 0; i < n; i++) {
if (str[i].length() == maxLen)
System.out.println(str[i]);
}
}
}