JavaSE 有关字符串和数组的问题

字符串

字符串的模式匹配操作

在主串中,查找是否存在子串。推荐算法为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()及时处理
    }
}

你可能感兴趣的:(笔记)