【Java】String類__Java

來源:互聯網
上載者:User

一、String類的基本概述

1、API

Java.lang   //不用導包

public final class String

String類代表字串。Java程式中的所有字串字面值(如:”abc“)都作為此類的執行個體實現。

即”abc“就是String類的執行個體對象。


2、重點理解

字串是常量;它的值在建立之後不能更改。解釋如下:

截圖來源:https://www.cnblogs.com/cisum/p/8011485.html


s只是一個String對象的引用,並不是對象本身。


字串常量池:

 字串池是方法區中的一部分特殊儲存。當一個字串被建立的時候,首先會去這個字串池中尋找,如果找到,

直接返回對該字串的引用;  

    (也就是說,如果兩個字串的內容完全一樣,那麼他們的記憶體位址一定相等,且其實只有一份)


線程的安全性;

 多線程操作之所以不安全,完全是因為多個子線程在同一時間內操作某個公開變數,且該變數在操作之後變數的值

  會發生改變;因為String一旦建立之後,就無法再修改其值,所以,String是安全執行緒的;

3、建立與儲存機制(參筆試面試寶典)


4、如果直接列印對象的引用,會預設調用toString方法,如果返回的不是對象@雜湊地址,那麼toString方法就被重寫了。

String 類重寫了toString方法,返回的是該對象本身。


二、String類的構造方法(11種)

1、public String():空構造 空的字串

2、public String(byte[] bytes):把位元組數組轉成字串,解碼GBK   byte[]

3、public String(byte[] bytes,int index, int length):把位元組數組的一部分轉換成字串,length是要轉換的長度  byte[]

4、public String(char[] value):將字元數群組轉換成字串  char[]

5、public String(char[] value,int index, int count):把字元數組的一部分轉換成字串

5、public String(String original):把字串常量值轉換成字串


三、常見面試題(掌握)

1、常量池中沒有這個對象就建立一個,有的話就直接用不用再建立了。指向同一個對象的引用的地址值是相同的

2、new String("abc");建立兩個對象,一個在常量池中,一個在堆記憶體中(字串的副本),地址值不一樣就是兩個對象。(前提是常量池中之前沒有abc,如果有的話這裡就建立一個對象)。

3、“+”,java語言提供對字串串聯符號+以及將其他對象轉換為字串的特殊支援。字串穿藍是通過先建立StringBuilder(StringBuffer)對象的append方法實現拼接,然後通過toString方法將字串返回。

記憶體配置圖示意:


flase

true


四、String類的判斷功能(掌握)

1、boolean equals(Object obj):比較字串的內容是否相同,區分大小寫

2、boolean equalsIgnoreCase(String str):比較字串的內容是否相同,忽略大小寫

3、boolean contains(String str):判斷大字串中是否包含小字串

4、boolean  startWith(String str):判斷字串是否以某個指定的字串開頭

5、boolean endWith(String str):判斷字串是否以某個指定的字串結尾

6、4、boolean isEmpty():判斷字元是否為空白


null和“ ”的區別:

1、“ ”是字串常量,同事也是一個String類的對象,也可調用String類的方法

2、null是空常量,不能調用任何辦法,否則會出現null 指標異常


五、類比使用者登入

需求:類比登陸,給三次機會,並提示還有幾次。

使用者名稱和密碼都是admin

分析:

1、類比登陸,需要鍵盤錄入,Scanner

2、給三次機會,需要迴圈,for

3、並提示有幾次,需要判斷,if

import java.util.Scanner;;public class Test_monidenglu {public static void main(String[] args) {  int count; for(int i = 1;i<=3;i++) { Scanner sc = new Scanner(System.in); System.out.println("請輸入使用者名稱:"); String name = sc.nextLine(); System.out.println("請輸入密碼:"); String password = sc.nextLine();  if (name.equals("admin") && password.equals("admin")) { System.out.println("成功登陸。"); break; }else { count = 3-i; System.out.println("您還有"+ count +"次機會"); System.out.println("請繼續輸入"); if(count ==0) { System.out.println("您的次數已用完,請聯絡客服找回使用者名稱和密碼"); } }  }}}

六、String類的擷取功能(掌握)

1、int length():擷取字串的長度(每個字元的個數不是位元組長度),注意數組中的legth是屬性,而這裡是方法

2、char charAt(int index):擷取指定索引位置的字元

3、int indexOf(int ch):返回指定字元在此字串中第一次出現處的索引

4、int indexOf(String  str):返回指定字串在此字串中第一次出現處的索引

5、int indexOf(int ch, int fromIndex):返回指定字元在此字串中從指定位置後第一次出現處的索引

6、lastIndexOf(String str):返回指定字串在此字串中最後一次出現的索引

7、String substring(int start):從指定位置開始截取字串,預設到末尾

8、String substring(int start,int end):從指定位置開始到指定位置結束截取字串,包含頭不包含尾


七、字串的遍曆

需求:遍曆字串


八、統計不同類型的字元個數

需求:統計一個字串中大寫字母字元,小寫字母字元,數字字元出現的次數,其他字元出現的次數

ABCDEabcd123456!@#$%^

public class Test_tongji {public static void main(String[] args) {int x = 0 ,y = 0, z=0, k=0;String s = "ABCDEabcd123456!@#$%^";for(int i = 0;i < s.length();i++) {char a = s.charAt(i);  //char charAt(int index):擷取指定索引位置的字元if(a >='A' && a <= 'Z') {x++;}else if(a >='a' && a <= 'z'){y++;}else if(a >='1' && a <='9'){z++;}else{k++;}}System.out.println("大寫字母的個數是:"+ x);System.out.println("小寫字母的個數是:"+ y);System.out.println("數位個數是:"+ z);System.out.println("其他字母的個數是:"+ k);}}


九、String類的轉換功能

1、byte[] geyBytes():把字串轉換為字元數組  編碼:將看的懂的轉換為電腦看的

GBK編碼:一個中文代表兩個位元組。中文的第一個位元組肯定是負數。

2、char[] toCharArray():把字串轉換為字元數組

3、static String valueOf(char[] chs):把字元數群組轉換為字串

4、static String valueOf(int i):把int 類型的資料轉換為字串

注意:String類的valueOf方法可以把任意類型的資料轉換成字串。重載類型。都是靜態方法,類名.方法就可以調用了。該方法的底層實現其實就是String的一個構造方法,將new String方法封裝起來了。

5、String toLowerCase():把字串轉換成小寫

6、String toUpperCase():把字串轉換成大寫

7、String concat(String str):把字串拼接


十、String類的其他功能

1、String的替換功能

String replace(char old,char new)

String replace(String old,String new)

2、String的去除字串兩端空格

String trim();

3、String的按照字典順序比較兩個字串  按照碼錶值比較  ASICC unicode

int compareTo(string str)

int compareToIgnoreCase(string str):忽略大小寫


十一、字串的反轉

思路:

1、通過鍵盤錄入擷取字串

2、將字串轉換成字元數組

3、倒著白哪裡字元數組。並再次拼接成字串

4、列印

public class Test_fanzhuang {public static void main(String[] args) {String s="abc";char[] ch = s.toCharArray();String ss = "";for(int i = ch.length-1; i >= 0; i--) {   //倒著遍曆ss = ss + ch[i];  //字元拼接}System.out.println(ss);}}

十二、在大字串中找小字串出現的次數

思路:

1、定義計數器變數

2、判斷小字串中是否有小字串 indexOf()

   有,用substring()將大字串進行截取(在第一次小字串的後邊進行截取),重新賦值給大字串,計數器加1,繼續迴圈。

   沒有,返回-1

3、列印計數器

 
import java.util.Scanner;public class Test_daxiaochuan {public static void main(String[] args) {Scanner sc1 = new Scanner(System.in);System.out.println("請輸入大字串:");String s1 = sc1.nextLine();Scanner sc2 = new Scanner(System.in);System.out.println("請輸入小字串:");String s2 = sc2.nextLine();int count = 0;while(s1.indexOf(s2) != -1) {   //大字串中出現小字串int index = s1.indexOf(s2);s1 = s1.substring(index+s2.length());  //將大字串進行截取count++;}                System.out.println(count);}}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.