成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

String類基礎(chǔ)的那些事!

30e8336b8229 / 3497人閱讀

摘要:第三階段常見對(duì)象的學(xué)習(xí)第一章常見對(duì)象類一類的概述及其構(gòu)造方法概述多個(gè)字符組成的一串?dāng)?shù)據(jù),例如也可以看成是一個(gè)字符數(shù)組。

第三階段 JAVA常見對(duì)象的學(xué)習(xí) 第一章 常見對(duì)象——String類 (一) String 類的概述及其構(gòu)造方法 (1) 概述

多個(gè)字符組成的一串?dāng)?shù)據(jù),例如 “abc” 也可以看成是一個(gè)字符數(shù)組。

而通過 API我們又可以知道

A:字符串字面值“abc”也可以看成是一個(gè)字符串對(duì)象

B:字符串是常量,一旦被賦值,就不能改變

(2) 構(gòu)造方法
//空構(gòu)造
public String()

//把字節(jié)數(shù)組轉(zhuǎn)換成字符串
public String(byte[] bytes)

//把字節(jié)數(shù)組的一部分轉(zhuǎn)換成字符串
public String(byte[] bytes,int offset,int length)

//把字符數(shù)組轉(zhuǎn)換成字符串
public String(char[] value)

//把字符數(shù)組的一部分轉(zhuǎn)換成字符串
public String(char[] value,int offset,int count)

//把字符串常量值轉(zhuǎn)換成字符串    
public String(String original)

//下面的這一個(gè)雖然不是構(gòu)造方法,但是結(jié)果也是一個(gè)字符串對(duì)象
String s = "hello";

簡(jiǎn)單總結(jié):String類的構(gòu)造方法可以將 字節(jié)、字符數(shù)組、字符串常量(全部或者部分)轉(zhuǎn)換為字符串類型

(3) 字符串方法
//返回此字符串的長(zhǎng)度
public int length ();
(4)構(gòu)造方法和lenght方法的小案例
//以前三個(gè)為例
public class StringDemo {
    public static void main(String[] args) {
        //public String():空構(gòu)造
        String s1 = new String();
        System.out.println("s1:" + s1);
        System.out.println("s1.length:" + s1.length());
        System.out.println("-------------------------");

        //把字節(jié)數(shù)組轉(zhuǎn)換成字符串:public String(byte[] bytes)
        byte[] bys = {97,98,99,100,101}; //abcde
        String s2 = new String(bys);
        System.out.println("s2:" + s2);
        System.out.println("s2.length:" + s2.length());
        System.out.println("-------------------------");

        //把字節(jié)數(shù)組的一部分轉(zhuǎn)換成字符串:
        //public String(byte[] bytes,int offset,int length)
        String s3 = new String(bys,1,3);
        System.out.println("s3:" + s3);
        System.out.println("s3.length:" + s3.length());
    }
}
//運(yùn)行結(jié)果:
s1:
s1.length:0
-------------------------
s2:abcde
s2.length:5
-------------------------
s3:bcd
s3.length:3

注:97,98,99,100,101 在ASCII碼中代表abcde,不熟悉的朋友請(qǐng)自行查閱

(5) 經(jīng)典例題(必看)

例題一:

/*
 *  字符串特點(diǎn):一旦被賦值,就不能改變
 */
public class StringDemo {
    public static void main(String[] args) {
        String s = "Hello";
        s += "World";
        System.out.println("s:" + s);
    }
}

//運(yùn)行結(jié)果:
s:HelloWorld

解釋:不能改變是指字符串對(duì)象本身不能改變,而不是指對(duì)象的引用不能改變,上述過程中,字符串本身的內(nèi)容是沒有任何變化的,而是分別創(chuàng)建了三塊內(nèi)存空間,(Hello) (World) (HelloWorld) s → Hello + World → HelloWorld 。String內(nèi)容的改變實(shí)際上是通過字符串之間的拼接、斷開進(jìn)行的,如上例中拼接后s的引用也就指向了 拼接后的HelloWorld

總結(jié):開發(fā)中,盡量少使用 + 進(jìn)行字符串的拼接,尤其是循環(huán)內(nèi),我們更加推薦使用StringBuild、StringBuffer,此內(nèi)容下一篇詳細(xì)講解。

例題二:

//兩者的區(qū)別
String s = new String("hello");
String s = "hello";

前者創(chuàng)建了2個(gè) (1個(gè)) 對(duì)象,后者創(chuàng)建了1個(gè) (0個(gè)) 對(duì)象

下面解釋中若存在情況滿足則,分別為創(chuàng)建1個(gè)和0個(gè)對(duì)象

解釋:

String s = new String("hello"); 創(chuàng)建實(shí)例過程

在堆中創(chuàng)建一個(gè)對(duì)象 “hello” (new出來的),讓 s 引用這個(gè)對(duì)象

在字符串常量池中查找是否存在內(nèi)容為 “hello”的字符串對(duì)象

? A:若存在,將new出的對(duì)象與字符串常量池中已存在的相聯(lián)系

? B:若不存在,則在字符串常量池中創(chuàng)建一個(gè)內(nèi)容為 "abc" 的字符串對(duì)象,并與堆中 的對(duì)相聯(lián)系

String s = "hello"; 創(chuàng)建實(shí)例過程

在字符串常量中查找是否存在內(nèi)容為"hello"的字符串對(duì)象

? A:若存在,讓s直接引用該對(duì)象

? B:若不存在,則直接讓s引用該對(duì)象

總結(jié):前者new一個(gè)對(duì)象,“hello”隱式創(chuàng)建一個(gè)對(duì)象,后者只有“hello”創(chuàng)建一個(gè)對(duì)象,在開發(fā)中,盡量使用 String s = "hello" 的方式,效率比另一種高。

例題三:

public class StringDemo {
    public static void main(String[] args) {
        String s1 = new String("hello");
        String s2 = new String("hello");
        System.out.println(s1 == s2);//false
        System.out.println(s1.equals(s2));//true

        String s3 = new String("hello");
        String s4 = "hello";
        System.out.println(s3 == s4);//false
        System.out.println(s3.equals(s4));//true

        String s5 = "hello";
        String s6 = "hello";
        System.out.println(s5 == s6);//true
        System.out.println(s5.equals(s6));//true
    }
}
//運(yùn)行結(jié)果
false
true
false
true
true
true

解釋: == 比較地址值是否相同、String中的equals()比較字符串內(nèi)容是否一致

例題四:

public class StringDemo2 {
    public static void main(String[] args) {
        String s1 = "Hello";
        String s2 = "World";
        String s3 = "HelloWorld";

        System.out.println(s3 == s1 + s2);
        System.out.println(s3.equals(s1 + s2));
        System.out.println(s3 == "Hello" + "World"); //重點(diǎn)
        System.out.println(s3.equals("Hello" + "World"));
    }
}
//運(yùn)行結(jié)果
false
true
true
true

總結(jié):

字符串中如果是變量相加,先開空間,再拼接

字符串中如果是字符串相加,是先加,然后在常量池中找,如果有就直接返回否則就創(chuàng)建

(二) String類的功能 (1) 判斷功能
//比較字符串的內(nèi)容是否相同,區(qū)分大小寫
boolean equals(Object obj)

//比較字符串的內(nèi)容是否相同,不區(qū)分大小寫
boolean equalsIgnoreCase(String str)

//判斷大字符串中是否包含小字符串
boolean contains(String str)

//判斷某個(gè)字符串是否以某個(gè)指定的字符串開頭
boolean startsWith(String str)

//判斷某個(gè)字符串是否以某個(gè)指定的字符串結(jié)尾
boolean endsWith(String str)

//判斷字符串是否為空
boolean isEmpty()

注意:
String s = “ ”;   // 字符串內(nèi)容為空
String s = null;  // 字符串對(duì)象為空

簡(jiǎn)單模擬登錄案例 (String版)

import java.util.Scanner;

/*
 *  模擬登陸案例,給三次機(jī)會(huì),并且提示剩余次數(shù)
 *      A:定義用戶名和密碼(已經(jīng)存在的)
 *      B:鍵盤錄入用戶名和密碼
 *      C:比較用戶名和密碼
 *      D:給三次機(jī)會(huì),用循環(huán)改進(jìn)
 */

public class StringDemo {
    public static void main(String[] args) {
        for (int x = 0; x < 3; x++) {
            String username = "admin";
            String password = "admin888";

            Scanner sc = new Scanner(System.in);
            System.out.println("請(qǐng)輸入用戶名");
            String name = sc.nextLine();
            System.out.println("請(qǐng)輸入密碼");
            String psw = sc.nextLine();
            if (name.equals(username) && psw.equals(password)) {
                System.out.println("登錄成功");
            } else {
                if ((2 - x) == 0) {
                    System.out.println("你的賬號(hào)已經(jīng)被鎖定,請(qǐng)與管理員聯(lián)系");
                } else {
                    System.out.println("登錄失敗,你還有" + (2 - x) + "次機(jī)會(huì)");
                }
            }
        }
    }
}
(2) 獲取功能
//獲取字符串的長(zhǎng)度
int length()

//獲取指定索引的字符
char charAt(int index)

//返回指定字符在此字符串中第一次出現(xiàn)的索引
int indexOf(int ch)
//為什么這里是int而不是char?
//原因是:‘a(chǎn)’和‘97’其實(shí)都能代表‘a(chǎn)’ int方便

//返回指定字符串在此字符串中第一次出現(xiàn)的索引
int indexOf(String str)

//返回指定字符在此字符串中從指定位置后第一次出現(xiàn)的索引
int indexOf(int ch,int fromIndex)

//返回指定字符串在此字符串中從指定位置后第一次出現(xiàn)的索引
int indexOf(String str,int fromIndex)

//從指定位置開始截取字符串,默認(rèn)到末尾
String substring(int start)

//從指定位置開始指定位置結(jié)束截取字符串
String substring(int start,int end)

字符串中數(shù)據(jù)統(tǒng)計(jì)案例

import java.util.Scanner;

/*
 *  案例:統(tǒng)計(jì)一個(gè)字符串中大寫字母字符,小寫字母字符,數(shù)字字符出現(xiàn) * 的次數(shù)
 */
 
public class StringDemo {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("請(qǐng)輸入需要統(tǒng)計(jì)的數(shù)據(jù)");
        String s = sc.nextLine();

        int numberCount = 0;
        int smallCout = 0;
        int bigCout = 0;

        for (int x = 0; x < s.length(); x++) {
            char ch = s.charAt(x);
            if (ch >= "a" && ch <= "z") {
                smallCout++;
            } else if (ch >= "A" && ch <= "a") {
                bigCout++;
            } else if (ch >= "0" && ch <= "9") {
                numberCount++;
            }
        }
        
        System.out.println("大寫字母:" + bigCout + "個(gè)");
        System.out.println("小寫字母:" + smallCout + "個(gè)");
        System.out.println("數(shù)字:" + numberCount + "個(gè)");
    }
}
//運(yùn)行結(jié)果
請(qǐng)輸入需要統(tǒng)計(jì)的數(shù)據(jù)
HelloWorld520
大寫字母:2個(gè)
小寫字母:8個(gè)
數(shù)字:3個(gè)
(3) 轉(zhuǎn)換功能
//把字符串轉(zhuǎn)換為字節(jié)數(shù)組
byte[] getBytes()

//把字符串轉(zhuǎn)換成字符數(shù)組
char[] toCharArray()

//把字符數(shù)組轉(zhuǎn)換成字符串
static String valueOf(char[] chs)

//把int類型的數(shù)據(jù)轉(zhuǎn)換成字符串
static String valueOf(int i)
//注意:String類的valueOf方法可以把任何類型的數(shù)據(jù)轉(zhuǎn)換成字符串!
  
//把字符串轉(zhuǎn)換成小寫    
String toLowerCase()

//把字符串轉(zhuǎn)換成大寫
String toUpperCase()

//把字符串拼接
String concat(String str)
(4) 其他功能
//替換功能 
String replace(char old,char new)
String replace(String old,String new)

//去除字符串兩端空格
String trim()

//按字典比較功能
int compareTo(String str)
int compareToIgnoreCase(String str) 

逆序輸出字符串案例

/*
 *  鍵盤輸入 "abc"
 *  輸出結(jié)果 "cba"
 */

import java.util.Scanner;

public class StringDemo2 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("請(qǐng)輸入:");
        String line = sc.nextLine();

        char[] chs = line.toCharArray();

        String result = "";

        for (int x = chs.length - 1; x >= 0; x--) {
            result += chs[x];
        }      
        System.out.println("reusult:" + result);
    }
}
//運(yùn)行結(jié)果
請(qǐng)輸入:
abc
reusult:cba

大串中查詢小串案例

import java.util.Scanner;

public class StringDemo {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("請(qǐng)輸入被統(tǒng)計(jì)的數(shù)據(jù)");
        String maxString = sc.nextLine();
        System.out.println("請(qǐng)輸入統(tǒng)計(jì)關(guān)鍵詞");
        String minString = sc.nextLine();
        int count = getCount(maxString, minString);
        System.out.println("count:" + count);
    }

    public static int getCount(String maxString, String minString) {
        //定義一個(gè)統(tǒng)計(jì)變量,初始化為0
        int count = 0;

        //先在大串中查找小串第一次出現(xiàn)的位置
        int index = maxString.indexOf(minString);

        //索引不是-1,說明存在,統(tǒng)計(jì)變量++
        while (index != -1) {
            count++;
            //把剛才的索引 + 小串的長(zhǎng)度作為開始位置截取上一次的大串
            //返回一個(gè)新的字符串,并把該字符串的值重新賦給大串
            int startIndex = index + minString.length();
            maxString = maxString.substring(startIndex);
            index = maxString.indexOf(minString);
        }
        return count;
    }
}

//運(yùn)行結(jié)果
請(qǐng)輸入被統(tǒng)計(jì)的數(shù)據(jù)
Hello520World520
請(qǐng)輸入統(tǒng)計(jì)關(guān)鍵詞
520
count:2
結(jié)尾:

如果內(nèi)容中有什么不足,或者錯(cuò)誤的地方,歡迎大家給我留言提出意見, 蟹蟹大家 !^_^

如果能幫到你的話,那就來關(guān)注我吧?。ㄏ盗形恼戮鶗?huì)在公眾號(hào)第一時(shí)間更新)

在這里的我們素不相識(shí),卻都在為了自己的夢(mèng)而努力 ?

一個(gè)堅(jiān)持推送原創(chuàng)Java技術(shù)的公眾號(hào):理想二旬不止

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/74919.html

相關(guān)文章

  • 【面試】Java基礎(chǔ)那些-Thr

    摘要:為了提高程序運(yùn)行的效率,在軟件發(fā)布后,檢查默認(rèn)是被關(guān)閉的。注意不能保證原子性,不能代替,且其會(huì)阻止編譯器對(duì)代碼的優(yōu)化。以下方法用來判斷一個(gè)字符串中是否包含中文字符。 前言 面試中對(duì)于技術(shù)職位,一般分筆試與面談,如果面試官的一些小問題你可以立馬找到對(duì)應(yīng)的知識(shí)點(diǎn)擴(kuò)展開來,那么這就是你的優(yōu)勢(shì),本系列將講述一些java面試中的事,不會(huì)很詳細(xì),但是應(yīng)該比較全面吧。 主要內(nèi)容 assert有什么作...

    ShowerSun 評(píng)論0 收藏0
  • 【面試】Java基礎(chǔ)那些-Two

    摘要:前言面試中對(duì)于技術(shù)職位,一般分筆試與面談,如果面試官的一些小問題你可以立馬找到對(duì)應(yīng)的知識(shí)點(diǎn)擴(kuò)展開來,那么這就是你的優(yōu)勢(shì),本系列將講述一些面試中的事,不會(huì)很詳細(xì),但是應(yīng)該比較全面吧。 前言 面試中對(duì)于技術(shù)職位,一般分筆試與面談,如果面試官的一些小問題你可以立馬找到對(duì)應(yīng)的知識(shí)點(diǎn)擴(kuò)展開來,那么這就是你的優(yōu)勢(shì),本系列將講述一些java面試中的事,不會(huì)很詳細(xì),但是應(yīng)該比較全面吧。 主要內(nèi)容 pa...

    you_De 評(píng)論0 收藏0
  • String那些

    摘要:的不可變性眾所周知,是常量,不可變,這一點(diǎn)很重要。那中,包裝類的一個(gè)特質(zhì)就是值操作時(shí)體現(xiàn)對(duì)應(yīng)的基本類型的特質(zhì)。同樣的,等這些包裝類和在這種情況下的表現(xiàn)是相同的。那么無論你對(duì)傳入?yún)?shù)做了什么操作,都不會(huì)影響原來的值。 1. String的不可變性 眾所周知,String是常量,不可變,這一點(diǎn)很重要。其底層的實(shí)現(xiàn)是char[]: /** The value is used for ...

    gghyoo 評(píng)論0 收藏0
  • 【面試】Java基礎(chǔ)那些-One

    摘要:前言面試中對(duì)于技術(shù)職位,一般分筆試與面談,如果面試官的一些小問題你可以立馬找到對(duì)應(yīng)的知識(shí)點(diǎn)擴(kuò)展開來,那么這就是你的優(yōu)勢(shì),本系列將講述一些面試中的事,不會(huì)很詳細(xì),但是應(yīng)該比較全面吧。 前言 面試中對(duì)于技術(shù)職位,一般分筆試與面談,如果面試官的一些小問題你可以立馬找到對(duì)應(yīng)的知識(shí)點(diǎn)擴(kuò)展開來,那么這就是你的優(yōu)勢(shì),本系列將講述一些java面試中的事,不會(huì)很詳細(xì),但是應(yīng)該比較全面吧。 主要內(nèi)容 說到...

    Stardustsky 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<