亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java中字符串String常用方法詳解

 更新時(shí)間:2024年01月26日 10:11:23   作者:tao滔不絕  
這篇文章主要給大家介紹了關(guān)于Java中字符串String常用方法的相關(guān)資料,String表示字符串類型,是引用數(shù)據(jù)類型不是基本數(shù)據(jù)類型,String是類且是最終類,不能有子類,文中將用法介紹的非常詳細(xì),需要的朋友可以參考下

一、常用方法

1、字符串構(gòu)造

三種構(gòu)造方法

(1)、直接賦值

String s1 = "hello world";
System.out.println(s1);

(2)、創(chuàng)建出新的對(duì)象

String s2 = new String("hello");
System.out.println(s2);

(3)、使用字符數(shù)組進(jìn)行構(gòu)造

char[] ch = {'h','e','l','l','o'};
String s3 = new String(ch);
System.out.println(s3);

三個(gè)輸出效果如下:

2、String對(duì)象的比較

對(duì)于基本變量,可以直接用 “==, <,  >,  <=, >= ”來(lái)進(jìn)行比較,但對(duì)于引用類型變量,不可以直接使用上面的表達(dá)式來(lái)比較,如圖:

代碼:

String s1 = new String("hello");
String s2 = new String("hello");
System.out.println(s1 == s2);

s1和s2的內(nèi)容都是一樣的,為啥下面輸出false呢?

原因是s1和s2是引用類型,使用上述表達(dá)式進(jìn)行比較,比較的是兩個(gè)對(duì)象的地址,兩個(gè)對(duì)象是不同的,地址自然也是不同的。

那么怎么可以比較引用對(duì)象的內(nèi)容呢?有以下方法:

(1)、equals方法

按照字典序比較,字典序:字符大小。

Object的equals默認(rèn)是按 “==” 進(jìn)行比較的,如圖:

所以類都默認(rèn)繼承Object類,String繼承Object類,重寫(xiě)了equals方法,如圖:

方法的使用:

代碼:

        String s1 = new String("hello");
        String s2 = new String("hello");
        System.out.println(s1.equals(s2));

        String s3 = new String("Hello");
        System.out.println(s1.equals(s3));

執(zhí)行效果:

(2)、compareTo方法

按照字典序比較,和equals方法不同的是:equals返回的是boolean類型,而compareTo返回的是int類型,具體比較方式:

        1、先按照字典序大小比較,如果出現(xiàn)不相等的字符,直接返回這兩個(gè)字符的大小差值。

        2、如果前k個(gè)字符相同,返回兩個(gè)字符串長(zhǎng)度差值。

方法內(nèi)部:

public int compareTo(String anotherString) {
        int len1 = value.length;
        int len2 = anotherString.value.length;
        int lim = Math.min(len1, len2);
        char v1[] = value;
        char v2[] = anotherString.value;

        int k = 0;
        while (k < lim) {
            char c1 = v1[k];
            char c2 = v2[k];
            if (c1 != c2) {
                return c1 - c2;
            }
            k++;
        }
        return len1 - len2;
    }

方法使用:

代碼:

        String s1 = new String("ab");
        String s2 = new String("ac");
        String s3 = new String("ab");
        String s4 = new String("abcdef");
        System.out.println(s1.compareTo(s2)); // 不同輸出字符差值-1
        System.out.println(s1.compareTo(s3)); // 相同輸出 0
        System.out.println(s1.compareTo(s4)); // 前k個(gè)字符完全相同,輸出長(zhǎng)度差值 -3

執(zhí)行效果:

(3)、compareToIgnoreCase方法(忽略大小寫(xiě)進(jìn)行比較)

與compareTo方法一樣,不過(guò)忽略大小寫(xiě)

方法內(nèi)部:

public static final Comparator<String> CASE_INSENSITIVE_ORDER
                                         = new CaseInsensitiveComparator();
    private static class CaseInsensitiveComparator
            implements Comparator<String>, java.io.Serializable {
        // use serialVersionUID from JDK 1.2.2 for interoperability
        private static final long serialVersionUID = 8575799808933029326L;

        public int compare(String s1, String s2) {
            int n1 = s1.length();
            int n2 = s2.length();
            int min = Math.min(n1, n2);
            for (int i = 0; i < min; i++) {
                char c1 = s1.charAt(i);
                char c2 = s2.charAt(i);
                if (c1 != c2) {
                    c1 = Character.toUpperCase(c1);
                    c2 = Character.toUpperCase(c2);
                    if (c1 != c2) {
                        c1 = Character.toLowerCase(c1);
                        c2 = Character.toLowerCase(c2);
                        if (c1 != c2) {
                            // No overflow because of numeric promotion
                            return c1 - c2;
                        }
                    }
                }
            }
            return n1 - n2;
        }

方法的使用:

代碼:

String s1 = new String("hello");
        String s2 = new String("Hello");
        System.out.println(s1.compareToIgnoreCase(s2));

執(zhí)行效果:

3、字符串查找

方法功能
char charAt(int index)返回index位置上字符,如果index為負(fù)數(shù)或者越界,拋出
IndexOutOfBoundsException異常
int indexOf(int ch)返回ch第一次出現(xiàn)的位置,沒(méi)有返回-1
int indexOf(int ch, int
fromIndex)
從fromIndex位置開(kāi)始找ch第一次出現(xiàn)的位置,沒(méi)有返回-1
int indexOf(String str)返回str第一次出現(xiàn)的位置,沒(méi)有返回-1
int indexOf(String str, int
fromIndex)
從fromIndex位置開(kāi)始找str第一次出現(xiàn)的位置,沒(méi)有返回-1
int lastIndexOf(int ch)從后往前找,返回ch第一次出現(xiàn)的位置,沒(méi)有返回-1
int lastIndexOf(int ch, int
fromIndex)
從fromIndex位置開(kāi)始找,從后往前找ch第一次出現(xiàn)的位置,沒(méi)有返
回-1
int lastIndexOf(String str)從后往前找,返回str第一次出現(xiàn)的位置,沒(méi)有返回-1
int lastIndexOf(String str, int
fromIndex)
從fromIndex位置開(kāi)始找,從后往前找str第一次出現(xiàn)的位置,沒(méi)有返
回-1

4、轉(zhuǎn)化

(1)數(shù)值和字符串轉(zhuǎn)化

數(shù)值轉(zhuǎn)字符串:

        String s1 = String.valueOf(1234);
        String s2 = String.valueOf(12.34);
        System.out.println(s1);
        System.out.println(s2);

        System.out.println("==============");

        String s3 = String.valueOf(true);
        String s4 = String.valueOf(new Student("Hanmeimei", 18));
        System.out.println(s3);
        System.out.println(s4);

整型轉(zhuǎn)換為字符串型的內(nèi)部代碼:

    public static String valueOf(int i) {
        return Integer.toString(i);
    }

double類型轉(zhuǎn)換為字符串型代碼:

    public static String valueOf(double d) {
        return Double.toString(d);
    }

boolean轉(zhuǎn)換為字符串的內(nèi)部代碼:

    public static String valueOf(boolean b) {
        return b ? "true" : "false";
    }

引用類型轉(zhuǎn)換為字符串型的內(nèi)部代碼:

    public static String valueOf(Object obj) {
        return (obj == null) ? "null" : obj.toString();
    }

字符串轉(zhuǎn)換為整型 / double類型:

代碼:

int data1 = Integer.parseInt("1234");
Double data2 = Double.parseDouble("12.34");

如圖,執(zhí)行效果:

(2)大小寫(xiě)轉(zhuǎn)換

代碼:

        String s1 = "hello";
        String s2 = "HELLO";
        //小寫(xiě)轉(zhuǎn)大寫(xiě)
        System.out.println(s1.toUpperCase());
        //大寫(xiě)轉(zhuǎn)小寫(xiě)
        System.out.println(s2.toLowerCase());

執(zhí)行效果:

(3)字符串轉(zhuǎn)數(shù)組

代碼:

//字符串轉(zhuǎn)數(shù)組
char[] ch = s1.toCharArray();
//數(shù)組轉(zhuǎn)字符串
String s2 = new String(ch);

執(zhí)行效果

(4)格式化

代碼:

String s = String.format("%d-%d-%d", 2023, 11, 21);

執(zhí)行效果:

5、字符串替換

使用一個(gè)新的字符串替換舊的字符串,方法如下:

方法功能
String replaceAll(String regex, String replacement)替換所有的指定內(nèi)容
String replaceFirst(String regex, String replacement)替換首個(gè)內(nèi)容

代碼:

String str = "hello world";
System.out.println(str.replaceAll("l", "-"));
System.out.println(str.replaceFirst("l", "-"));

執(zhí)行效果:

6、字符串拆分

可以將一個(gè)完整的字符串按照指定的分隔符劃分成若干個(gè)字符子串

方法功能
String[] split(String regex)將字符串全部拆分
String[] split(String regex, int limit)將字符串以指定的格式,拆分為limit組

代碼:

        String s1 = "hello world hello bit";
        String[] result = s1.split(" ");
        for(String x : result) {
            System.out.println(x);
        }

執(zhí)行效果:

字符串的部分拆分代碼: 

        String s1 = "hello world hello bit";
        String[] result = s1.split(" ", 2);
        for(String x : result) {
            System.out.println(x);
        }

拆分IP地址: 

        String s1 = "192.168.1.1";
        String[] result = s1.split("\\.");
        for(String x : result) {
            System.out.println(x);
        }

執(zhí)行效果:

注意:要寫(xiě)劃分ip地址,在字符串里寫(xiě)進(jìn)轉(zhuǎn)義字符,在字符串里,兩個(gè) “ \\ ” 代表一個(gè) “ \ ” 

1. 字符"|","*","+"都得加上轉(zhuǎn)義字符,前面加上 "\\" .

2. 而如果是 "\" ,那么就得寫(xiě)成 "\\\\" .

3. 如果一個(gè)字符串中有多個(gè)分隔符,可以用"|"作為連字符.

如下:

        String s1 = "192.16-8.1.1";
        String[] result = s1.split("\\.|-");
        for(String x : result) {
            System.out.println(x);
        }

代碼示例: 多次拆分

String str = "name=zhangsan&age=18" ;
String[] result = str.split("&") ;
for (int i = 0; i < result.length; i++) {
String[] temp = result[i].split("=") ;
System.out.println(temp[0]+" = "+temp[1]);
}

7、字符串截取

從一個(gè)完整的字符串截取出部分內(nèi)容,方法如下:

方法功能
String substring(int beginIndex)從指定索引截取到結(jié)尾
String substring(int beginIndex, int endIndex)截取部分內(nèi)容

代碼:

        String s = "helloworld";
        System.out.println(s.substring(5));
        System.out.println(s.substring(0, 5));

執(zhí)行效果:

注意:區(qū)間是是前閉后開(kāi)的規(guī)則,上面的第二個(gè)substring語(yǔ)句,是 [0,5)。所以不包含5下標(biāo)。

8、其他操作方法

方法功能
String trim()去掉字符串中的左右空格,保留中間空格
String toUpperCase()字符串轉(zhuǎn)大寫(xiě)
String toLowerCase()字符串轉(zhuǎn)小寫(xiě)

trim 會(huì)去掉字符串開(kāi)頭和結(jié)尾的空白字符(空格, 換行, 制表符等).

后面兩個(gè)函數(shù)只轉(zhuǎn)換字母

二、String的不可變性

String是一種不可變對(duì)象. 字符串中的內(nèi)容是不可改變。字符串不可被修改,是因?yàn)椋?/p>

1. String類在設(shè)計(jì)時(shí)就是不可改變的,String類實(shí)現(xiàn)描述中已經(jīng)說(shuō)明了

String類中的字符實(shí)際保存在內(nèi)部維護(hù)的value字符數(shù)組中,該圖還可以看出:

1. String類被final修飾,表明該類不能被繼承。

2. value被修飾被final修飾,表明value自身的值不能改變,即不能引用其它字符數(shù)組,但是其引用空間中的內(nèi)容可以修改。

2. 所有涉及到可能修改字符串內(nèi)容的操作都是創(chuàng)建一個(gè)新對(duì)象,改變的是新對(duì)象比如 replace 方法:

原因不是final,

final修飾類表明該類不想被繼承,final修飾引用類型表明該引用變量不能引用其他對(duì)象,但是其引用對(duì)象中的內(nèi)容是可以修改的代碼驗(yàn)證如下:

final int array[] = {1,2,3,4,5};
array[0] = 100;
System.out.println(Arrays.toString(array));
//array = new int[]{4,5,6}; //java: 無(wú)法為最終變量array分配值

執(zhí)行效果:

注意:盡量避免直接對(duì)String類型對(duì)象進(jìn)行修改,因?yàn)镾tring類是不能修改的,所有的修改都會(huì)創(chuàng)建新對(duì)象,效率非常低下,盡量避免對(duì)String的直接修改,如果要修改建議盡量使用StringBuffer或者StringBuilder。

三、StringBuffer和StingBuilder

1、方法:

方法說(shuō)明
StringBuff append(String
str)
在尾部追加,相當(dāng)于String的+=,可以追加:boolean、char、char[]、
double、float、int、long、Object、String、StringBuff的變量
char charAt(int index)獲取index位置的字符
int length()獲取字符串的長(zhǎng)度
int capacity()獲取底層保存字符串空間總的大小
void ensureCapacity(int
mininmumCapacity)
擴(kuò)容
void setCharAt(int index,
char ch)
將index位置的字符設(shè)置為ch
int indexOf(String str)返回str第一次出現(xiàn)的位置
int indexOf(String str, int
fromIndex)
從fromIndex位置開(kāi)始查找str第一次出現(xiàn)的位置
int lastIndexOf(String str)返回最后一次出現(xiàn)str的位置
int lastIndexOf(String str,
int fromIndex)
從fromIndex位置開(kāi)始找str最后一次出現(xiàn)的位置
StringBuff insert(int
offset, String str)
在offset位置插入:八種基類類型 & String類型 & Object類型數(shù)據(jù)
StringBuffer
deleteCharAt(int index)
刪除index位置字符
StringBuffer delete(int
start, int end)
刪除[start, end)區(qū)間內(nèi)的字符
StringBuffer replace(int
start, int end, String str)
將[start, end)位置的字符替換為str
String substring(int start)從start開(kāi)始一直到末尾的字符以String的方式返回
String substring(int
start,int end)
將[start, end)范圍內(nèi)的字符以String的方式返回
StringBuffer reverse()反轉(zhuǎn)字符串
String toString()將所有字符按照String的方式返回

String和StringBuilder最大的區(qū)別在于String的內(nèi)容無(wú)法修改,而StringBuilder的內(nèi)容可以修改。

和StringBuffer的區(qū)別也是。頻繁修改字符串的情況考慮使用StringBuilder / StringBuffer。

2、String、StringBuffer、StringBuilder的區(qū)別

(1)String的內(nèi)容不可修改,StringBuffer和StringBuilder的內(nèi)容可修改。

(2)StringBuffer和StringBuilder的大部分功能一樣。

(3)StringBuffer采用同步處理,屬于線程安全操作,StringBuilder未采用同步處理,不屬于線程安全操作。

總結(jié)

到此這篇關(guān)于Java中字符串String常用方法的文章就介紹到這了,更多相關(guān)Java字符串String內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論