字符串
字符串的模式匹配操作
在主串中,查找是否存在子串。推荐算法为KMP算法,这里采用暴力枚举法。
class Test{
public static void main(String[] args){
/*
问题1:求s2在s1中出现的次数
s1="abcabcbcacbabbabcba"
s2="abc"
推荐算法:KMP算法
*/
question1();
}
public static void question1(){
/*
问题1:求s2在s1中出现的次数
s1="abcabcbcacbabbabcba"
s2="abc"
*/
String s1="12376128736123123612312312536123123";
String s2="12";
int count=0;
for(int i=0;i<s1.length()-s2.length()+1;i++){
String sub=s1.substring(i,i+s2.length());
if(sub.equals(s2)){
count++;
}
}
System.out.println("s2在s1中出现了"+count+"次");
}
}
判断字符串是否为回文
class Test{
public static void main(String[] args){
/*
问题2:判断字符串s是否是回文
s="上海自来水来自海上"
*/
question2();
}
public static void question2(){
/*
问题2:判断字符串s是否是回文
s="上海自来水来自海上"
*/
String s="13088888031";
int left=0;
int right=s.length()-1;
boolean flag=true;
while(true){
if(s.charAt(left)==s.charAt(right)){
left++;
right--;
if(left>=right){
break;
}
}else{
flag=false;
break;
}
}
System.out.println("s是回文吗:"+flag);
}
}
模拟trim功能
class Test{
public static void main(String[] args){
/*
问题3:模拟trim的功能,自定义实现
s=" 安利给~ "
*/
question3();
}
public static void question3(){
/*
问题3:模拟trim的功能,自定义实现
s=" 安利给~ "
*/
String s=" 123123123 ";
int left=0;
int right=s.length()-1;
while(s.charAt(left)==' '){
left++;
}
while(s.charAt(right)==' '){
right--;
}
String res=s.substring(left,right+1);
System.out.println("["+res+"]");
}
}
两字符串中的最大相同子串
class Test{
public static void main(String[] args){
/*
问题4:求s1和s2中最大的相同子串(s1.length()>s2.length())
s1="Python is a program language but is slow";
s2="Java is a program language but is fast"
*/
question4();
}
}
public static void question4(){
/*
问题4:求s1和s2中最大的相同子串(s1.length()>s2.length())
s1="Python is a program language but is slow";
s2="Java is a program language but is fast"
" is a program language but is "
*/
String s1="Python is a program language but is slow";
String s2="Java is a program language but is fast";
boolean flag=true;
for(int len=s2.length();len>=1;len--){
for(int i=0,j=len-1;j<s2.length();i++,j++){
String sub=s2.substring(i,j+1);
// System.out.println(sub);
if(s1.contains(sub)){
flag=false;
System.out.println("结果就是["+sub+"]");
break;
}
}
if(!flag){
break;
}
}
}
}
数组的两个异常和垃圾回收机制
角标越界异常和空指针异常。
class Test04{
public static void main(String[] args){
//需求1:创建长度为5的int型数组(一维) 矩阵(二维)
int[] arr=new int[5];
System.out.println(arr[10]);
//ArrayIndexOutOfBoundsException 角标越界
int[] arr2=arr;
//此时此刻 数组还是那个数组对象
//只不多有两个变量引用到了而已
arr2[0]=10;
System.out.println(arr[0]);
arr2=null;
//System.out.println(arr2[0]);
//NullPointerException 空指针异常
arr=null;
//此时此刻 数组对象没有任何变量引用它
//数组对象在堆内存中就没有存在的意义了
//所以该对象变成垃圾,由【垃圾回收器gc】处理
//【垃圾回收期】是JVM中的一个程序 专门用于负责处理堆内存中垃圾数据的
//垃圾的处理并不是及时的,有【gc】来控制,当垃圾堆攒到一定程度时由【gc】来处理
//特殊的 在C/C++中 如果出现对象垃圾 必须由程序员手动处理 free()及时处理
}
}