java学习笔记之String类及其练习

String是java.lang包内的一个类
一、定义一个字符串常量

public class StringDemo {
    public static void main(String[] args) {
        String str1="abc"; //存放到字符串的常量池中,这个值不能被改变
        String str2=new String("abc"); //比较的是字符串的内容是否相同;堆内存中有一个String对象,常量池中有一个abc对象
        String str3="abc"; //常量池中只有一个abc,在创建新的字符串常量时,会先判断常量池中是否有该字符串,如果有就不再新创建,并且将新建的对象引用该字符串常量的地址,所以str3和str2的地址相同。
        System.out.println(str1==str2);
        System.out.println(str3==str1);
        System.out.println(str1.equals(str2));//内容是相同的
    }
}

str1和str2的区别就是str1在内存中有一个对象;str2在内存中有两个对象(堆内存和常量池)
String类没有提供用于修改字符串的方法。可以看下面的代码

public class StringReplace {
    public static void main(String[] args) {
        String str1="hello";
        String str2="java";
        str2.replace("a", "o");
        str1=str2;
        System.out.print(str1);
    }

}

结果会发现仍旧是“java”,因为执行replace操作后,常量池中会增加一个新的字符串“jovo”,而不是将“java”改为“jovo”,str2的地址仍旧指向“java”.
二、String有很多重要的方法,简单列举如下:
char charAt(int index) —->返回指定索引处的 char 值。
boolean equals(Object anObject) —->将此字符串与指定的对象比较。
boolean contains(CharSequence s) —->当且仅当此字符串包含指定的 char 值序列时,返回 true。
int compareTo(String anotherString) —-> 按字典顺序比较两个字符串。
int indexOf(String str) —->返回指定子字符串在此字符串中第一次出现处的索引。
int indexOf(String str, int fromIndex) —->返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。
int length() —->返回此字符串的长度。
char[] toCharArray() —->将此字符串转换为一个新的字符数组。
String substring(int beginIndex) —->返回一个新的字符串,它是此字符串的一个子字符串。(该子字符串从指定索引处的字符开始,直到此字符串末尾。)
String substring(int beginIndex, int endIndex) —->返回一个新字符串,它是此字符串的一个子字符串。(该子字符串从指定的 beginIndex 处开始,直到索引 endIndex - 1 处的字符。因此,该子字符串的长度为 endIndex-beginIndex。)
三、String类的练习
(1)对已知字符串进行排序(”bupt”,”java”,”cctv”,”nba”,”kid”,”csdn”),输出结果为bupt,cctv,csdn,java,kid,nba

public class StringSort {
    public static void main(String[] args) {
        String[] str={"bupt","java","cctv","nba","kid","csdn"};
        sort(str);
        printString(str);
    }
    public static void sort(String[] str) {
        for(int x=0;x<str.length-1;x++){
            for(int y=x+1;y<str.length;y++){
                if(!str[x].compareTo(str[y])=-1){ //返回值为-1,则不相等;返回值为0,则相等
                    String temp = str[x];
                    str[x]=str[y];
                    str[y]=temp;
                }
            }
        }   
    }
    public static void printString(String[] str) {
        for(int x=0;x<str.length;x++){
            if(x!=str.length-1)
                System.out.print(str[x]+",");
            else
                System.out.print(str[x]);
        }       
    }
}

(2)得出子串在整串中出现的次数“abcbuptjdhfgbuptundhribuptkditbupt”

public class StringTest {

    public static void main(String[] args) {
        String strs=“abcbuptjdhfgbuptundhribuptkditbupt”
        String key="bupt";
        int count =getKey(strs,key);
        System.out.print(count);

    }
    public static int getKey(String strs, String key) {
        int count=0;
        int index=0;
        while((index=strs.indexOf(key,index))>0){ //indexOf()方法
                 count++;
                 index=index+key.length();
        }
        return count;
    }
}

(3)输出两个字符串中的最大相同子串(面试考过),”zhdgcctvkid”,”dkocctvdkidkdgj”

public class StringSameSubstring {
    public static void main(String[] args) {
        /*
         * 需求:两个字符串中的最大相同子串
         * 1、看两个字符串是否是包含与被包含的关系
         * 2、否:从较短字符串中的最长的可能子串开始判断
         */
        String str1="zhdgcctvkid";
        String str2="dkocctvdkidkdgj";
        String maxstr=MaxStr(str1,str2);
        System.out.println(maxstr);
    }
    public static String MaxStr(String str1, String str2) {
        String maxstr="";
        String max;
        String min;
        if(str1.length()>str2.length()){
            max=str1;
            min=str2;
        }
        else{
            max=str2;
            min=str1;
        }
        if(max.contains(min)==true)
            return min;
        else{   
        for(int x=0;xint length=min.length();
                for(int y=0,z=length-x;zif(max.contains(strs)==true){
                        maxstr=strs;
                        return maxstr;
                    }
                }
            }
        }
        return null;
    }
}

结果是cctv。
(4)对字符串中的字符进行自然排序,输出排序后的字符串

package my.java.String;
import java.util.Arrays;
public class SortString {
    public static void main(String[] args) {
        // 需求:对字符串中的字符进行自然排序"dkocctvdkidkdgj"
        //数组直接就有排序的方法,因此思路可以是先将字符串转为char类型的数组,可以用toCharArray方法
        String str="qazwsx";
        char[] char_str=str.toCharArray();
        Arrays.sort(char_str);
        System.out.println(Arrays.toString(char_str));//将字符类型的数组转成字符串
    }

}

输出为[a, q, s, w, x, z]

你可能感兴趣的:(java的漫长学习之路)