❶ java求出两个字符串的最长的前缀节点
public static String GetMostLongPreNode(String s1, String s2)
{
char[] c1=s1.toCharArray();
char[] c2=s2.toCharArray();
int length=c1.length<c2.length?c1.length:c2.length;
for (int i = 0; i < length; i++) {
if(i==0&&c1[i]!=c2[i])return "没有相等的前缀节点";
if(i==length-1&&c1[i]==c2[i])return ""+c1[i];
if(c1[i]!=c2[i])return ""+c1[i-1];
}
return "没有相等的前缀节点";
}
❷ Java是什么东西
Java 是 Sun 公司推出的一种编程语言。它是一种通过解释方式来执行的语言,语法规则和 C++ 类似。
同时, Java 也是一种跨平台的程序设计语言。用 Java 语言编写的程序叫做 “Applet” (小应用程序),用编译器将它编译成类文件后,将它存在 WWW 页面中,并在 HTML 档上作好相应标记,用户端只要装上 Java 的客户软件就可以在网上直接运行 “Applet” 。 Java 非常适合于企业网络和 Internet 环境,现在已成为 Internet 中最受欢迎、最有影响的编程语言之一。 Java 有许多值得称道的优点,如简单、面向对象、分布式、解释性、可靠、安全、结构中立性、可移植性、高性能、多线程、动态性等。 Java 摈弃了 C++ 中各种弊大于利的功能和许多很少用到的功能。 Java 可以运行与任何微处理器,用 Java 开发的程序可以在网络上传输,并运行于任何客户机上。 JAVA的特点
Java是一种跨平台,适合于分布式计算环境的面向对象编程语言。具体来说,它具有如下特性:简单性、面向对象、分布式、解释型、可靠、安全、平台无关、可移植、高性能、多线程、动态性等。下面我们将重点介绍Java语言的面向对象、平台无关、分布式、多线程、可靠和安全等特性。
- 面向对象
面向对象其实是现实世界模型的自然延伸。现实世界中任何实体都可以看作是对象。对象之间通过消息相互作用。另外,现实世界中任何实体都可归属于某类事物,任何对象都是某一类事物的实例。如果说传统的过程式编程语言是以过程为中心以算法为驱动的话,面向对象的编程语言则是以对象为中心以消息为驱动。用公式表示,过程式编程语言为:程序=算法+数据;面向对象编程语言为:程序=对象+消息。
所有面向对象编程语言都支持三个概念:封装、多态性和继承,Java也不例外。现实世界中的对象均有属性和行为,映射到计算机程序上,属性则表示对象的数据,行为表示对象的方法(其作用是处理数据或同外界交互)。所谓封装,就是用一个自主式框架把对象的数据和方法联在一起形成一个整体。可以说,对象是支持封装的手段,是封装的基本单位。Java语言的封装性较强,因为Java无全程变量,无主函数,在Java中绝大部分成员是对象,只有简单的数字类型、字符类型和布尔类型除外。而对于这些类型,Java也提供了相应的对象类型以便与其他对象交互操作。
多态性就是多种表现形式,具体来说,可以用"一个对外接口,多个内在实现方法"表示。举一个例子,计算机中的堆栈可以存储各种格式的数据,包括整型,浮点或字符。不管存储的是何种数据,堆栈的算法实现是一样的。针对不同的数据类型,编程人员不必手工选择,只需使用统一接口名,系统可自动选择。运算符重载(operator overload)一直被认为是一种优秀的多态机制体现,但由于考虑到它会使程序变得难以理解,所以Java最后还是把它取消了。
继承是指一个对象直接使用另一对象的属性和方法。事实上,我们遇到的很多实体都有继承的含义。例如,若把汽车看成一个实体,它可以分成多个子实体,如:卡车、公共汽车等。这些子实体都具有汽车的特性,因此,汽车是它们的"父亲",而这些子实体则是汽车的"孩子"。Java提供给用户一系列类(class),Java的类有层次结构,子类可以继承父类的属性和方法。与另外一些面向对象编程语言不同,Java只支持单一继承。
Java是平台无关的语言是指用Java写的应用程序不用修改就可在不同的软硬件平台上运行。平台无关有两种:源代码级和目标代码级。C和C++具有一定程度的源代码级平台无关,表明用C或C++写的应用程序不用修改只需重新编译就可以在不同平台上运行。
Java主要靠Java虚拟机(JVM)在目标码级实现平台无关性。JVM是一种抽象机器,它附着在具体操作系统之上,本身具有一套虚机器指令,并有自己的栈、寄存器组等。但JVM通常是在软件上而不是在硬件上实现。(目前,SUN系统公司已经设计实现了Java芯片,主要使用在网络计算机NC上。另外,Java芯片的出现也会使Java更容易嵌入到家用电器中。)JVM是Java平台无关的基础,在JVM上,有一个Java解释器用来解释Java编译器编译后的程序。Java编程人员在编写完软件后,通过Java编译器将Java源程序编译为JVM的字节代码。任何一台机器只要配备了Java解释器,就可以运行这个程序,而不管这种字节码是在何种平台上生成的(过程如图1所示)。另外,Java采用的是基于IEEE标准的数据类型。通过JVM保证数据类型的一致性,也确保了Java的平台无关性。
❸ 用java编写输入两个字符串输出最大相同字符串
这种东西一搜一大堆啊
publicclassLCString3{
publicstaticvoidgetLCString(char[]str1,char[]str2){
inti,j;
intlen1,len2;
len1=str1.length;
len2=str2.length;
intmaxLen=len1>len2?len1:len2;
int[]max=newint[maxLen];
int[]maxIndex=newint[maxLen];
int[]c=newint[maxLen];
for(i=0;i<len2;i++){
for(j=len1-1;j>=0;j--){
if(str2[i]==str1[j]){
if((i==0)||(j==0))
c[j]=1;
else
c[j]=c[j-1]+1;
}else{
c[j]=0;
}
if(c[j]>max[0]){//如果是大于那暂时只有一个是最长的,而且要把后面的清0;
max[0]=c[j];
maxIndex[0]=j;
for(intk=1;k<maxLen;k++){
max[k]=0;
maxIndex[k]=0;
}
}elseif(c[j]==max[0]){//有多个是相同长度的子串
for(intk=1;k<maxLen;k++){
if(max[k]==0){
max[k]=c[j];
maxIndex[k]=j;
break;//在后面加一个就要退出循环了
}
}
}
}
}
for(j=0;j<maxLen;j++){
if(max[j]>0){
System.out.println("第"+(j+1)+"个公共子串:");
for(i=maxIndex[j]-max[j]+1;i<=maxIndex[j];i++)
System.out.print(str1[i]);
System.out.println("");
}
}
}
publicstaticvoidmain(String[]args){
Stringstr1=newString("helloworld");
Stringstr2=newString("hello,world");
getLCString(str1.toCharArray(),str2.toCharArray());
}
}
❹ 应该怎样学习JAVA顺序是什么
不知道Java 学习顺序的话,我提供你一条学习线路图!
按照视频学习的过程中,学习方法也是很重要的!一定要记得勤记笔记,整理程思维导图,方便后续复习方便。
第一部分:JavaSE:Java语言最基本的一套库
学习JavaEE或JavaME之前,JavaSE是必学的。
* Java开发环境搭建
* Java基础语法
* 面向对象
* 数组
* 异常
* 集合
* 线程
* IO流
* 反射机制
* 注解Annotation
* 网络编程
第二部分:数据库 【MySQL + JDBC】
* 只要学习编程,数据库是一定要学习的,是一门公共的学科。
* java、C、python、C#等程序员都需要学习数据库。
* 数据库产品很多: MySQL、Oracle、SqlServer、DB2......
* 我们动力节点数据库课程包括:MySQL + Oracle
* Oracle:银行、政府使用oracle的较多。
* MySQL:互联网公司、一般企业使用MySQL较多。
* Oracle我们是提供视频的。课堂上不讲。
* 我们课堂上讲MySQL。
* Java语言链接数据库:JDBC
第三部分:WEB前端
* 系统结构:B/S【Browser/Server】 C/S【Client/Server】
* WEB是网站的意思。WEB前端是:网站当中的页面。
* WEB前端程序是运行在浏览器当中的。
* HTML5 + CSS3 + JavaScript(JS)
* WEB前端也有很多框架:
- jQuery
- Bootstrap
- Vue
- NodeJS
- AugularJS
- RectJS
- LayUI
- EasyUI
.....
第四部分:JavaWEB
* Servlet
* JSP
* AJAX(是JavaScript的一部分语法,专门做页面局部刷新)
第五部分:JavaWEB项目
* 做一个B/S结构的项目,将WEB前端和JavaWEB内容做一个整合练习。
* 其实到这里为止,所有的系统都可以做了。但是用的技术很Low。没有用框架。
❺ 什么是java关键字
Abstract抽象的一个Java语言中的关键字,用在类的声明中来指明一个类是不能被实例化的,但是可以被其它类继承。一个抽象类可以使用抽象方法,抽象方法不需要实现,但是需要在子类中被实现break一个Java的关键字,用来改变程序执行流程,立刻从当前语句的下一句开始执行从。如果后面跟有一个标签,则从标签对应的地方开始执行caseJava语言的关键字,用来定义一组分支选择,如果某个值和switch中给出的值一样,就会从该分支开始执行。catchJava的一个关键字,用来声明当try语句块中发生运行时错误或非运行时异常时运行的一个块。charJava语言的一个关键字,用来定义一个字符类型continue一个Java的关键字,用来打断当前循环过程,从当前循环的最后重新开始执行,如果后面跟有一个标签,则从标签对应的地方开始执行。do一个Java语言的关键字,用来声明一个循环,这个循环的结束条件可以通过while关键字设置double一个Java语言的关键字,用来定义一个double类型的变量else一个Java语言的关键字,如果if语句的条件不满足就会执行该语句。final一个Java语言的关键字。你只能定义一个实体一次,以后不能改变它或继承它。更严格的讲:一个final修饰的类不能被子类化,一个final修饰的方法不能被重写,一个final修饰的变量不能改变其初始值。finally一个Java语言的关键字,用来执行一段代码不管在前面定义的try语句中是否有异常或运行时错误发生。float一个Java语言的关键字,用来定义一个浮点数变量for一个Java语言的关键字,用来声明一个循环。程序员可以指定要循环的语句,推出条件和初始化变量。ifJava编程语言的一个关键字,用来生成一个条件测试,如果条件为真,就执行if下的语句。implementsJava(TM)编程语言的一个关键字,在类的声明中是可选的,用来指明当前类实现的接口。importJava(TM)编程语言的一个关键字,在源文件的开始部分指明后面将要引用的一个类或整个包,这样就不必在使用的时候加上包的名字。instanceof一个二操作数的Java(TM)语言关键字,用来测试第一个参数的运行时类型是否和第二个参数兼容。intJava(TM)的一个关键字,用来定义一个整形变量Java(TM)的一个关键字,用来定义一系列的方法和常量。它可以被类实现,通过implements关键字。longJava语言的一个关键字,用来定义一个long类型的变量。privateJava语言的一个关键字,用在方法或变量的声中。它表示这个方法或变量只能被这个类的其它元素所访问。protectedJava语言的一个关键字,在方法和变量的声明中使用,它表示这个方法或变量只能被同一个类中的,子类中的或者同一个包中的类中的元素所访问。publicJava语言的一个关键字,在方法和变量的声明中使用,它表示这个方法或变量能够被其它类中的元素访问。returnJava语言的一个关键字,用来结束一个方法的执行。它后面可以跟一个方法声明中要求的值。shortJava语言的关键字,用来定义一个short类型的变量。staticJava语言的关键字,用来定义一个变量为类变量。类只维护一个类变量的拷贝,不管该类当前有多少个实例。"static"同样能够用来定义一个方法为类方法。类方法通过类名调用而不是特定的实例,并且只能操作类变量。thisJava语言的关键字,用来代表它出现的类的一个实例。this可以用来访问类变量和类方法。throwJava语言的关键字,允许用户抛出一个exception对象或者任何实现throwable的对象throwsJava语言的关键字,用在方法的声明中来说明哪些异常这个方法是不处理的,而是提交到程序的更高一层。transientJava语言的关键字,用来表示一个域不是该对象串行化的一部分。当一个对象被串行化的时候,transient型变量的值不包括在串行化的表示中,然而非transient型的变量是被包括进去的。tryJava语言的关键字,用来定义一个可能抛出异常语句块。如果一个异常被抛出,一个可选的catch语句块会处理try语句块中抛出的异常。同时,一个finally语句块会被执行,无论一个异常是否被抛出。voidJava语言的关键字,用在Java语言的方法声明中说明这个方法没有任何返回值。"void"也可以用来表示一句没有任何功能的语句。volatileJava语言的关键字,用在变量的声明中表示这个变量是被同时运行的几个线程异步修改的。whileJava语言的一个关键字,用来定义一段反复执行的循环语句。循环的退出条件是while语句的一部分。关于break和continue。continue语句与break语句相关,但较少用到。continue语句用于使其所在的for、while或do-while语句开始下一次循环。在while与do-while语句中,continue语句的执行意味着立即执行测试部分;在for循环语句中,continue语句的执行则意味着使控制传递到增量部分。
❻ 比较两个文件 java实现
diff 程序的实现涉及到字符串的最长公共子串算法,你弄懂了这个算法,还有文件每行的hash怎么算,那这个问题也就不难了。JAVA我不会,只能给你个基本思路:
1 读文件A,B
2 计算A和B的每一行的hash值,存在数组ha[ ],hb[ ]中
3 计算ha和hb的最长公共子串,分别记录公共子串在ha和hb的位置X, Y
4 如果X[i] == Y[j] , 如果i>j,标记为删除, 如果 i<j, 标记为增加
5 如果X[i] == Y[j] 同时 i==j, 那么 ha[X[i]-1 ] != hb[Y[j]-1 ] ,标记为修改
有些下标i,j之类的细节没有考虑到位,我等有时间,自己用C++写一个就比较清楚了。
❼ 求两个字符串的最长公共子串,要求输入两个字符串,输出他们的最长公共子串,包括长度。
遍历一下就好了,java代码:
public class CommonSubString {
public String search(String s1,String s2)
{
String max = "";
for(int i=0; i<s1.length(); i++)
{
for(int j=i; j<s1.length(); j++)
{
String sub = s1.substring(i,j);
if((s2.indexOf(sub)!=-1)&&sub.length()>max.length())
{
max = sub;
}
}
}
return max;
}
public static void main(String[] args)
{
String s1 = "abcdefghigj";
String s2 = "xyzabcdefigj";
String output = new CommonSubString().search(s1,s2);
System.out.println(output);
}
}
❽ java求最大公共子串
二楼改的
c = b.substring(i,j-1);
之后下标越界没了。
程序无法出结果,中间有死循环。当while语句执行完之后j是a.length();然后是执行内循环for语句for(j=b.length()-1;j>0;j--) 此时只比较J>0;。。。。好像是个死循环。最内层的循环可以在加一个int k来控制。多次运行导致cpu上升至100%的。
提供一种矩阵算法,这是LCS的一种算法:
public class stringCompare {
/**求最长匹配子字符串算法
str数组记录每行生成的最大值strmax
max数组记录str数组最大时所处的列号nummaxj
最大子字符串为substring(nummax-strmax+1,strmax+1)
*/
public static void main(String[] args) {
String s1="asdfgxxcvasdfgc";
String s2="asdfxxcv";
int m=s1.length();
int n=s2.length();
int k=0;
int nummax=0;
int []str=new int[m];
int []max=new int[m];
int []num=new int[m];
for(int i=0;i<m;i++) //生成矩阵数组
for(int j=n-1;j>=0;j--)
{
if(s1.charAt(i)==s2.charAt(j))
if(i==0||j==0)
{
num[j]=1;
max[i]=j;
str[i]=1;
}
else
{
num[j]=num[j-1]+1;
if(max[i]<num[j])
{
max[i]=j;
str[i]=num[j];
}
}
else
num[j]=0;
}
for(k=0;k<m;k++) //求str数组的最大值
{
if(nummax<str[k])
{
nummax=str[k];
}
}
for(k=0;k<m;k++)
if(nummax==str[k])
System.out.println(s2.substring(max[k]-str[k]+1,max[k]+1));
}
}
❾ java中的空指针异常怎么解决
原文:https://www.hu.com/question
你这个问题的解决
问题定位:
在堆栈异常信息的第一行就可以定位到是哪里出了空指针,倘若这里不是你写的类,可以往下翻一下,找到你写的类,就是这里出现的空指针。
问题解决:
对一个空对象调用里面的方法或者属性的时候会报空指针,检查这个对象为什么是空即可。
Java 空指针异常的若干解决方案
Java 中任何对象都有可能为空,当我们调用空对象的方法时就会抛出 NullPointerException 空指针异常,这是一种非常常见的错误类型。我们可以使用若干种方法来避免产生这类异常,使得我们的代码更为健壮。本文将列举这些解决方案,包括传统的空值检测、编程规范、以及使用现代 Java 语言引入的各类工具来作为辅助。
运行时检测
最显而易见的方法就是使用 if (obj == null) 来对所有需要用到的对象来进行检测,包括函数参数、返回值、以及类实例的成员变量。当你检测到 null 值时,可以选择抛出更具针对性的异常类型,如 IllegalArgumentException,并添加消息内容。我们可以使用一些库函数来简化代码,如 Java 7 开始提供的 Objects#requireNonNull 方法:
public void testObjects(Object arg) {
Object checked = Objects.requireNonNull(arg, "arg must not be null");
checked.toString();}
Guava 的 Preconditions 类中也提供了一系列用于检测参数合法性的工具函数,其中就包含空值检测:
public void testGuava(Object arg) {
Object checked = Preconditions.checkNotNull(arg, "%s must not be null", "arg");
checked.toString();
}
我们还可以使用 Lombok 来生成空值检测代码,并抛出带有提示信息的空指针异常:
public void testLombok(@NonNull Object arg) {
arg.toString();
生成的代码如下:
public void testLombokGenerated(Object arg) {
if (arg == null) {
throw new NullPointerException("arg is marked @NonNull but is null");
}
arg.toString();
}
这个注解还可以用在类实例的成员变量上,所有的赋值操作会自动进行空值检测。
编程规范
·通过遵守某些编程规范,也可以从一定程度上减少空指针异常的发生。
使用那些已经对 null 值做过判断的方法,如 String#equals、String#valueOf、以及三方库中用来判断字符串和集合是否为空的函数:
if (str != null && str.equals("text")) {}
if ("text".equals(str)) {}
if (obj != null) { obj.toString(); }
String.valueOf(obj); // "null"
// from spring-core
StringUtils.isEmpty(str);
CollectionUtils.isEmpty(col);
// from guava
Strings.isNullOrEmpty(str);
// from commons-collections4
CollectionUtils.isEmpty(col);
·如果函数的某个参数可以接收 null 值,考虑改写成两个函数,使用不同的函数签名,这样就可以强制要求每个参数都不为空了:
public void methodA(Object arg1) {
methodB(arg1, new Object[0]);
}
public void methodB(Object arg1, Object[] arg2) {
for (Object obj : arg2) {} // no null check
}
·如果函数的返回值是集合类型,当结果为空时,不要返回 null 值,而是返回一个空的集合;如果返回值类型是对象,则可以选择抛出异常。Spring JdbcTemplate 正是使用了这种处理方式:
// 当查询结果为空时,返回 new ArrayList<>()
jdbcTemplate.queryForList("SELECT * FROM person");
// 若找不到该条记录,则抛出
jdbcTemplate.queryForObject("SELECT age FROM person WHERE id = 1", Integer.class);
// 支持泛型集合
public <T> List<T> testReturnCollection() {
return Collections.emptyList();
}
静态代码分析
Java 语言有许多静态代码分析工具,如 Eclipse IDE、SpotBugs、Checker Framework 等,它们可以帮助程序员检测出编译期的错误。结合 @Nullable 和 @Nonnull 等注解,我们就可以在程序运行之前发现可能抛出空指针异常的代码。
但是,空值检测注解还没有得到标准化。虽然 2006 年 9 月社区提出了 JSR 305 规范,但它长期处于搁置状态。很多第三方库提供了类似的注解,且得到了不同工具的支持,其中使用较多的有:
javax.annotation.Nonnull:由 JSR 305 提出,其参考实现为 com.google.code.findbugs.jsr305;
org.eclipse.jdt.annotation.NonNull:Eclipse IDE 原生支持的空值检测注解;
e.umd.cs.findbugs.annotations.NonNull:SpotBugs 使用的注解,基于 findbugs.jsr305;
org.springframework.lang.NonNull:Spring Framework 5.0 开始提供;
org.checkerframework.checker.nullness.qual.NonNull:Checker Framework 使用;
android.support.annotation.NonNull:集成在安卓开发工具中;
我建议使用一种跨 IDE 的解决方案,如 SpotBugs 或 Checker Framework,它们都能和 Maven 结合得很好。
SpotBugs 与 @NonNull、@CheckForNull
SpotBugs 是 FindBugs 的后继者。通过在方法的参数和返回值上添加 @NonNull 和 @CheckForNull 注解,SpotBugs 可以帮助我们进行编译期的空值检测。需要注意的是,SpotBugs 不支持 @Nullable 注解,必须用 @CheckForNull 代替。如官方文档中所说,仅当需要覆盖 @ParametersAreNonnullByDefault 时才会用到 @Nullable。
官方文档 中说明了如何将 SpotBugs 应用到 Maven 和 Eclipse 中去。我们还需要将 spotbugs-annotations 加入到项目依赖中,以便使用对应的注解。
以下是对不同使用场景的说明:
对于 Eclipse 用户,还可以使用 IDE 内置的空值检测工具,只需将默认的注解 org.eclipse.jdt.annotation.Nullable 替换为 SpotBugs 的注解即可:
Checker Framework 与 @NonNull、@Nullable
Checker Framework 能够作为 javac 编译器的插件运行,对代码中的数据类型进行检测,预防各类问题。我们可以参照 官方文档,将 Checker Framework 与 maven-compiler-plugin 结合,之后每次执行 mvn compile 时就会进行检查。Checker Framework 的空值检测程序支持几乎所有的注解,包括 JSR 305、Eclipse、甚至 lombok.NonNull。
Checker Framework 默认会将 @NonNull 应用到所有的函数参数和返回值上,因此,即使不添加这个注解,以下程序也是无法编译通过的:
Checker Framework 对使用 Spring Framework 5.0 以上的用户非常有用,因为 Spring 提供了内置的空值检测注解,且能够被 Checker Framework 支持。一方面我们无需再引入额外的 Jar 包,更重要的是 Spring Framework 代码本身就使用了这些注解,这样我们在调用它的 API 时就能有效地处理空值了。举例来说,StringUtils 类里可以传入空值的函数、以及会返回空值的函数都添加了 @Nullable 注解,而未添加的方法则继承了整个框架的 @NonNull 注解,因此,下列代码中的空指针异常就可以被 Checker Framework 检测到了:
Optional 类型
Java 8 引入了 Optional<T> 类型,我们可以用它来对函数的返回值进行包装。这种方式的优点是可以明确定义该方法是有可能返回空值的,因此调用方必须做好相应处理,这样也就不会引发空指针异常。但是,也不可避免地需要编写更多代码,而且会产生很多垃圾对象,增加 GC 的压力,因此在使用时需要酌情考虑。
方法的链式调用很容易引发空指针异常,但如果返回值都用 Optional 包装起来,就可以用 flatMap 方法来实现安全的链式调用了:
Java 8 Stream API 同样使用了 Optional 作为返回类型:
此外,Java 8 还针对基础类型提供了单独的 Optional 类,如 OptionalInt、OptionalDouble 等,在性能要求比较高的场景下很适用。
其它 JVM 语言中的空指针异常
Scala 语言中的 Option 类可以对标 Java 8 的 Optional。它有两个子类型,Some 表示有值,None 表示空。
除了使用 Option#isEmpty 判断,还可以使用 Scala 的模式匹配:
Scala 的集合处理函数库非常强大,Option 则可直接作为集合进行操作,如 filer、map、以及列表解析(for-comprehension):
Kotlin 使用了另一种方式,用户在定义变量时就需要明确区分 可空和不可空类型。当可空类型被使用时,就必须进行空值检测。
Kotlin 的特性之一是与 Java 的可互操作性,但 Kotlin 编译器无法知晓 Java 类型是否为空,这就需要在 Java 代码中使用注解了,而 Kotlin 支持的 注解 也非常广泛。Spring Framework 5.0 起原生支持 Kotlin,其空值检测也是通过注解进行的,使得 Kotlin 可以安全地调用 Spring Framework 的所有 API。
结论
在以上这些方案中,我比较推荐使用注解来预防空指针异常,因为这种方式十分有效,对代码的侵入性也较小。所有的公共 API 都应该使用 @Nullable 和 @NonNull 进行注解,这样就能强制调用方对空指针异常进行预防,让我们的程序更为健壮。
❿ java程序:写一个判断一个字符串和另一个字符串相同的字符且连续的字符串的长度。
从a第0位开始,取1个字符,看其是否在b中,如果是,再取前两个,直到不是,去掉最后一个,看其长度大于1,返回这个串和串长度;
再从a第1位开始……