日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java练习-String类、StringBuilder类、StringBuffer类10

發布時間:2024/3/13 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java练习-String类、StringBuilder类、StringBuffer类10 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • String類
    • 1 String類的概述
    • 2 String的特點
    • 3 String面試題看程序寫結果
    • 4 String面試題看程序寫結果2
    • 5 String類的判斷功能
    • 6 模擬用戶登錄練習
    • 7 String類的獲取功能
    • 8 字符串的遍歷
    • 9 統計大寫,小寫及數字字符的個數練習
    • 10 String類的轉換功能
    • 11 把字符串的首字母轉大寫其他轉小寫練習
    • 12 String類的其他功能:
    • 13 把int數組拼接字符串的案例
    • 14 字符串反轉的練習
    • 15 在大串中查找小串出現的次數案例
  • StringBuilder類
    • 1 String類拼接問題
    • 2 StringBuilder概述
    • 3 構造方法
    • 4 常用方法
      • append方法
      • toString方法
  • StringBuffer
    • 1 StringBuffer的概述
    • 2 StringBuffer的添加功能
    • 3 StringBuffer的刪除功能
    • 4 StringBuffer的替換功能
    • 5 StringBuffer的反轉功能
    • 6 StringBuffer的截取功能
    • 7 StringBuffer和String的相互轉換
    • 8 判斷一個字符串是否對稱
    • 9 String,StringBuffer,StringBuilder的區別

String類

1 String類的概述

字符串:就是由多個字符組成的一串數據。也可以看成是一個字符數組。
通過查看API,我們可以知道
A:字符串字面值"abc"也可以看成是一個字符串對象。
B:字符串是常量,一旦被賦值,就不能被改變。

構造方法:

  • public String():空構造
  • public String(byte[] bytes):把字節數組轉成字符串
  • public String(byte[] bytes,int index,int length):把字節數組的一部分轉成字符串
  • public String(char[] value):把字符數組轉成字符串
  • public String(char[] value,int index,int count):把字符數組的一部分轉成字符串
  • public String(String original):把字符串常量值轉成字符串

字符串的方法:
public int length():返回此字符串的長度。

例子:

public class StringDemo {public static void main(String[] args) {// public String():空構造String s1 = new String();System.out.println("s1:" + s1);System.out.println("s1.length():" + s1.length());System.out.println("--------------------------");// public String(byte[] bytes):把字節數組轉成字符串byte[] bys = { 97, 98, 99, 100, 101 };//byte范圍-128-127String s2 = new String(bys);System.out.println("s2:" + s2);System.out.println("s2.length():" + s2.length());System.out.println("--------------------------");// public String(byte[] bytes,int index,int length):把字節數組的一部分轉成字符串// 我想得到字符串"bcd"String s3 = new String(bys, 1, 3);System.out.println("s3:" + s3);System.out.println("s3.length():" + s3.length());System.out.println("--------------------------");// public String(char[] value):把字符數組轉成字符串char[] chs = { 'a', 'b', 'c', 'd', 'e', '愛', '林', '親' };String s4 = new String(chs);System.out.println("s4:" + s4);System.out.println("s4.length():" + s4.length());System.out.println("--------------------------");// public String(char[] value,int index,int count):把字符數組的一部分轉成字符串String s5 = new String(chs, 2, 4);System.out.println("s5:" + s5);System.out.println("s5.length():" + s5.length());System.out.println("--------------------------");//public String(String original):把字符串常量值轉成字符串String s6 = new String("abcde");System.out.println("s6:" + s6);System.out.println("s6.length():" + s6.length());System.out.println("--------------------------");//字符串字面值"abc"也可以看成是一個字符串對象。String s7 = "abcde";System.out.println("s7:"+s7);System.out.println("s7.length():"+s7.length());} }

2 String的特點

1.一旦被賦值就不能改變,新的值開辟新的空間
2. String s = new String(“hello”)和String s = “hello”;的區別?
有。前者會創建2個對象,后者創建1個對象。
3. ==:比較引用類型比較的是地址值是否相同
equals:比較引用類型默認也是比較地址值是否相同,而String類重寫了equals()方法,比較的是內容是否相同。

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

3 String面試題看程序寫結果

public class StringDemo3 {public static void main(String[] args) {String s1 = new String("hello");String s2 = new String("hello");System.out.println(s1 == s2);// falseSystem.out.println(s1.equals(s2));// trueString s3 = new String("hello");String s4 = "hello";System.out.println(s3 == s4);// falseSystem.out.println(s3.equals(s4));// trueString s5 = "hello";String s6 = "hello";System.out.println(s5 == s6);// trueSystem.out.println(s5.equals(s6));// true} }

4 String面試題看程序寫結果2

  • 看程序寫結果
  • 字符串如果是變量相加,先開空間,在拼接。
  • 字符串如果是常量相加,是先加,然后在常量池找,如果有就直接返回,否則,就創建。
public class StringDemo4 {public static void main(String[] args) {String s1 = "hello";String s2 = "world";String s3 = "helloworld";System.out.println(s3 == s1 + s2);// falseSystem.out.println(s3.equals((s1 + s2)));// trueSystem.out.println(s3 == "hello" + "world");// trueSystem.out.println(s3.equals("hello" + "world"));// true// 通過反編譯看源碼,我們知道這里已經做好了處理。// System.out.println(s3 == "helloworld");// System.out.println(s3.equals("helloworld"));} }

5 String類的判斷功能

  • boolean equals(Object obj):比較字符串的內容是否相同,區分大小寫
  • boolean equalsIgnoreCase(String str):比較字符串的內容是否相同,忽略大小寫
  • boolean contains(String str):判斷大字符串中是否包含小字符串
  • boolean startsWith(String str):判斷字符串是否以某個指定的字符串開頭
  • boolean endsWith(String str):判斷字符串是否以某個指定的字符串結尾
  • boolean isEmpty():判斷字符串是否為空。

注意:
字符串內容為空和字符串對象為空。
String s = “”;
String s = null;

public class StringDemo {public static void main(String[] args) {// 創建字符串對象String s1 = "helloworld";String s2 = "helloworld";String s3 = "HelloWorld";// boolean equals(Object obj):比較字符串的內容是否相同,區分大小寫System.out.println("equals:" + s1.equals(s2));System.out.println("equals:" + s1.equals(s3));System.out.println("-----------------------");// boolean equalsIgnoreCase(String str):比較字符串的內容是否相同,忽略大小寫System.out.println("equals:" + s1.equalsIgnoreCase(s2));System.out.println("equals:" + s1.equalsIgnoreCase(s3));System.out.println("-----------------------");// boolean contains(String str):判斷大字符串中是否包含小字符串System.out.println("contains:" + s1.contains("hello"));System.out.println("contains:" + s1.contains("hw"));System.out.println("-----------------------");// boolean startsWith(String str):判斷字符串是否以某個指定的字符串開頭System.out.println("startsWith:" + s1.startsWith("h"));System.out.println("startsWith:" + s1.startsWith("hello"));System.out.println("startsWith:" + s1.startsWith("world"));System.out.println("-----------------------");// 練習:boolean endsWith(String str):判斷字符串是否以某個指定的字符串結尾這個自己玩// boolean isEmpty():判斷字符串是否為空。System.out.println("isEmpty:" + s1.isEmpty());String s4 = "";String s5 = null;System.out.println("isEmpty:" + s4.isEmpty());// NullPointerException// s5對象都不存在,所以不能調用方法,空指針異常System.out.println("isEmpty:" + s5.isEmpty());} }

6 模擬用戶登錄練習

模擬登錄,給三次機會,并提示還有幾次。

分析:
A:定義用戶名和密碼。已存在的。
B:鍵盤錄入用戶名和密碼。
C:比較用戶名和密碼。
如果都相同,則登錄成功
如果有一個不同,則登錄失敗
D:給三次機會,用循環改進,最好用for循環。

手寫:

public class Login {public static void main(String[] args) {String userName = "Test";String passWord = "Pass";String inputName;String inputPassword;Scanner sc = new Scanner(System.in);for(int i = 3; i > 0; i--){System.out.println("還有"+i+"次機會");System.out.println("請輸入用戶名:");inputName = sc.nextLine();System.out.println("請輸入密碼:");inputPassword = sc.nextLine();if (userName.equals(inputName) && passWord.equals(inputPassword)){System.out.println("登錄成功");break;}else{System.out.println("登錄失敗");}}} }

答案:

public class StringTest {public static void main(String[] args) {// 定義用戶名和密碼。已存在的。String username = "admin";String password = "admin";// 給三次機會,用循環改進,最好用for循環。for (int x = 0; x < 3; x++) {// x=0,1,2// 鍵盤錄入用戶名和密碼。Scanner sc = new Scanner(System.in);System.out.println("請輸入用戶名:");String name = sc.nextLine();System.out.println("請輸入密碼:");String pwd = sc.nextLine();// 比較用戶名和密碼。if (name.equals(username) && pwd.equals(password)) {// 如果都相同,則登錄成功System.out.println("登錄成功");break;} else {// 如果有一個不同,則登錄失敗// 2,1,0// 如果是第0次,應該換一種提示if ((2 - x) == 0) {System.out.println("帳號被鎖定,請與班長聯系");} else {System.out.println("登錄失敗,你還有" + (2 - x) + "次機會");}}}} }

7 String類的獲取功能

  • int length():獲取字符串的長度。
  • char charAt(int index):獲取指定索引位置的字符
  • int indexOf(int ch):返回指定字符在此字符串中第一次出現處的索引。
  • int indexOf(String str):返回指定字符串在此字符串中第一次出現處的索引。
  • int indexOf(int ch,int fromIndex):返回指定字符在此字符串中從指定位置后第一次出現處的索引。
  • int indexOf(String str,int fromIndex):返回指定字符串在此字符串中從指定位置后第一次出現處的索引。
  • String substring(int start):從指定位置開始截取字符串,默認到末尾。
  • String substring(int start,int end):從指定位置開始到指定位置結束截取字符串。
public class StringDemo {public static void main(String[] args) {// 定義一個字符串對象String s = "helloworld";// int length():獲取字符串的長度。System.out.println("s.length:" + s.length());System.out.println("----------------------");// char charAt(int index):獲取指定索引位置的字符System.out.println("charAt:" + s.charAt(7));System.out.println("----------------------");// int indexOf(int ch):返回指定字符在此字符串中第一次出現處的索引。System.out.println("indexOf:" + s.indexOf('l'));System.out.println("----------------------");// int indexOf(String str):返回指定字符串在此字符串中第一次出現處的索引。System.out.println("indexOf:" + s.indexOf("owo"));System.out.println("----------------------");// int indexOf(int ch,int fromIndex):返回指定字符在此字符串中從指定位置后第一次出現處的索引。System.out.println("indexOf:" + s.indexOf('l', 4));System.out.println("indexOf:" + s.indexOf('k', 4)); // -1System.out.println("indexOf:" + s.indexOf('l', 40)); // -1System.out.println("----------------------");// 自己練習:int indexOf(String str,int// fromIndex):返回指定字符串在此字符串中從指定位置后第一次出現處的索引。// String substring(int start):從指定位置開始截取字符串,默認到末尾。包含start這個索引System.out.println("substring:" + s.substring(5));System.out.println("substring:" + s.substring(0));System.out.println("----------------------");// String substring(int start,int// end):從指定位置開始到指定位置結束截取字符串。包括start索引但是不包end索引System.out.println("substring:" + s.substring(3, 8));System.out.println("substring:" + s.substring(0, s.length()));} }

8 字符串的遍歷

for (int x = 0; x < s.length(); x++) {// char ch = s.charAt(x);// System.out.println(ch);// 僅僅是輸出,我就直接輸出了System.out.println(s.charAt(x));}

9 統計大寫,小寫及數字字符的個數練習

  • 需求:統計一個字符串中大寫字母字符,小寫字母字符,數字字符出現的次數。(不考慮其他字符)

  • 舉例:
    “Hello123World”

  • 結果:
    大寫字符:2個
    小寫字符:8個
    數字字符:3個

  • 分析:
    前提:字符串要存在
    A:定義三個統計變量
    bigCount=0
    smallCount=0
    numberCount=0
    B:遍歷字符串,得到每一個字符。
    length()和charAt()結合
    C:判斷該字符到底是屬于那種類型的
    大:bigCount++
    小:smallCount++
    數字:numberCount++
    這道題目的難點就是如何判斷某個字符是大的,還是小的,還是數字的。
    ASCII碼表:
    0 48
    A 65
    a 97
    雖然,我們按照數字的這種比較是可以的,但是想多了,有比這還簡單的
    char ch = s.charAt(x);
    if(ch>=‘0’ && ch<=‘9’) numberCount++
    if(ch>=‘a’ && ch<=‘z’) smallCount++
    if(ch>=‘A’ && ch<=‘Z’) bigCount++
    D:輸出結果。

手寫練習:

package cn.plsite.apiTest;public class StringTest2 {public static void main(String[] args) {String str = "Hello123WorldzZ9";int bigCount = 0;int smallCount = 0;int numCount = 0;for(int i = 0; i < str.length(); i++){if(str.charAt(i) >= 'A' && str.charAt(i) <= 'Z'){bigCount++;}if(str.charAt(i) >= 'a' && str.charAt(i) <= 'z'){smallCount++;}if(str.charAt(i) >= '0' && str.charAt(i) <= '9'){numCount++;}}System.out.println("大寫字母有"+bigCount+"個");System.out.println("小寫字母有"+smallCount+"個");System.out.println("數字有"+numCount+"個");} }

10 String類的轉換功能

String的轉換功能:

  • byte[] getBytes():把字符串轉換為字節數組。
  • char[] toCharArray():把字符串轉換為字符數組。
  • static String valueOf(char[] chs):把字符數組轉成字符串。
  • static String valueOf(int i):把int類型的數據轉成字符串。
  • 注意:String類的valueOf方法可以把任意類型的數據轉成字符串。
  • String toLowerCase():把字符串轉成小寫。
  • String toUpperCase():把字符串轉成大寫。
  • String concat(String str):把字符串拼接。
public class StringDemo {public static void main(String[] args) {//定義一個字符串對象String s = "JavaSE";// byte[] getBytes():把字符串轉換為字節數組。byte[] bys = s.getBytes();for (int x = 0; x < bys.length; x++) {System.out.println(bys[x]);}System.out.println("----------------");// char[] toCharArray():把字符串轉換為字符數組。char[] chs = s.toCharArray();for (int x = 0; x < chs.length; x++) {System.out.println(chs[x]);}System.out.println("----------------");// static String valueOf(char[] chs):把字符數組轉成字符串。String ss = String.valueOf(chs);System.out.println(ss);System.out.println("----------------");// static String valueOf(int i):把int類型的數據轉成字符串。int i = 100;String sss = String.valueOf(i);System.out.println(sss);System.out.println("----------------");// String toLowerCase():把字符串轉成小寫。System.out.println("toLowerCase:" + s.toLowerCase());System.out.println("s:" + s);// System.out.println("----------------");// String toUpperCase():把字符串轉成大寫。System.out.println("toUpperCase:" + s.toUpperCase());System.out.println("----------------");// String concat(String str):把字符串拼接。String s1 = "hello";String s2 = "world";String s3 = s1 + s2;String s4 = s1.concat(s2);System.out.println("s3:"+s3);System.out.println("s4:"+s4);} }

運行結果:

74 97 118 97 83 69 ---------------- J a v a S E ---------------- JavaSE ---------------- 100 ---------------- toLowerCase:javase s:JavaSE toUpperCase:JAVASE ---------------- s3:helloworld s4:helloworld

11 把字符串的首字母轉大寫其他轉小寫練習

需求:把一個字符串的首字母轉成大寫,其余為小寫。(只考慮英文大小寫字母字符)
舉例:
helloWORLD
結果:
Helloworld

分析:
A:先獲取第一個字符
B:獲取除了第一個字符以外的字符
C:把A轉成大寫
D:把B轉成小寫
E:C拼接D

練習:

public class StringTest4 {public static void main(String[] args) {String s1 = "helloWOrLd";String s2 = s1.substring(0,1);String s3 = s1.substring(1,s1.length());String s4 = s2.toUpperCase();String s5 = s3.toLowerCase();String s6 = s4.concat(s5);System.out.println(s6);} }

標準答案:

public class StringTest {public static void main(String[] args) {// 定義一個字符串String s = "helloWORLD";// 先獲取第一個字符String s1 = s.substring(0, 1);// 獲取除了第一個字符以外的字符String s2 = s.substring(1);// 把A轉成大寫String s3 = s1.toUpperCase();// 把B轉成小寫String s4 = s2.toLowerCase();// C拼接DString s5 = s3.concat(s4);System.out.println(s5);// 優化后的代碼// 鏈式編程String result = s.substring(0, 1).toUpperCase().concat(s.substring(1).toLowerCase());System.out.println(result);} }

注意:substring截取是左閉右開形式的

12 String類的其他功能:

替換功能:

  • String replace(char old,char new)
  • String replace(String old,String new)

去除字符串首尾兩處的空格

  • String trim()

按字典順序比較兩個字符串:str和str2進行相比,當str比str2大時,輸出一個正整數;當str比str2小的時候輸出一個負整數;str和str2相等時輸出0。
*int compareTo(String str)
*int compareToIgnoreCase(String str)

// 替換功能String s1 = "helloworld";String s2 = s1.replace('l', 'k');String s3 = s1.replace("owo", "ak47");System.out.println("s1:" + s1);System.out.println("s2:" + s2);System.out.println("s3:" + s3);System.out.println("---------------");// 去除字符串兩空格String s4 = " hello world ";String s5 = s4.trim();System.out.println("s4:" + s4 + "---");System.out.println("s5:" + s5 + "---");// 按字典順序比較兩個字符串String s6 = "hello";String s7 = "hello";String s8 = "abc";String s9 = "xyz";System.out.println(s6.compareTo(s7));// 0System.out.println(s6.compareTo(s8));// 7System.out.println(s6.compareTo(s9));// -16

運行結果:

s1:helloworld s2:hekkoworkd s3:hellak47rld --------------- s4: hello world --- s5:hello world--- 0 7 -16

13 把int數組拼接字符串的案例

  • 需求:把數組中的數據按照指定個格式拼接成一個字符串
  • 舉例:
    int[] arr = {1,2,3};
  • 輸出結果:
    “[1, 2, 3]”
  • 分析:
    A:定義一個字符串對象,只不過內容為空
    B:先把字符串拼接一個"["
    C:遍歷int數組,得到每一個元素
    D:先判斷該元素是否為最后一個
    是:就直接拼接元素和"]"
    不是:就拼接元素和逗號以及空格
    E:輸出拼接后的字符串
public class StringTest {public static void main(String[] args) {// 前提是數組已經存在int[] arr = { 1, 2, 3 };// 定義一個字符串對象,只不過內容為空String s = "";// 先把字符串拼接一個"["s += "[";// 遍歷int數組,得到每一個元素for (int x = 0; x < arr.length; x++) {// 先判斷該元素是否為最后一個if (x == arr.length - 1) {// 就直接拼接元素和"]"s += arr[x];s += "]";} else {// 就拼接元素和逗號以及空格s += arr[x];s += ", ";}}// 輸出拼接后的字符串System.out.println("最終的字符串是:" + s);} }

改進版:

public class StringTest2 {public static void main(String[] args) {// 前提是數組已經存在int[] arr = { 1, 2, 3 };// 寫一個功能,實現結果String result = arrayToString(arr);System.out.println("最終結果是:" + result);}/** 兩個明確:返回值類型:String 參數列表:int[] arr*/public static String arrayToString(int[] arr) {// 定義一個字符串String s = "";// 先把字符串拼接一個"["s += "[";// 遍歷int數組,得到每一個元素for (int x = 0; x < arr.length; x++) {// 先判斷該元素是否為最后一個if (x == arr.length - 1) {// 就直接拼接元素和"]"s += arr[x];s += "]";} else {// 就拼接元素和逗號以及空格s += arr[x];s += ", ";}}return s;} }

14 字符串反轉的練習

  • 字符串反轉

  • 舉例:鍵盤錄入”abc”

  • 輸出結果:”cba”

  • 分析:
    A:鍵盤錄入一個字符串
    B:定義一個新字符串
    C:倒著遍歷字符串,得到每一個字符
    a:length()和charAt()結合
    b:把字符串轉成字符數組
    D:用新字符串把每一個字符拼接起來
    E:輸出新串
    自己練習:

mport java.util.Scanner;public class StringTest6 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("輸入字符串");String str1 = sc.nextLine();char[] strArr = str1.toCharArray();for (int i = 0 ;i < strArr.length / 2; i++){char temp;temp = strArr[i];strArr[i] = strArr[strArr.length - i -1];strArr[strArr.length - i - 1] = temp;}String str2 = new String(strArr);System.out.println("反轉字符串:"+ str2);} }

答案:

public class StringTest3 {public static void main(String[] args) {// 鍵盤錄入一個字符串Scanner sc = new Scanner(System.in);System.out.println("請輸入一個字符串:");String line = sc.nextLine();/*// 定義一個新字符串String result = "";// 把字符串轉成字符數組char[] chs = line.toCharArray();// 倒著遍歷字符串,得到每一個字符for (int x = chs.length - 1; x >= 0; x--) {// 用新字符串把每一個字符拼接起來result += chs[x];}// 輸出新串System.out.println("反轉后的結果是:" + result);*/// 改進為功能實現String s = myReverse(line);System.out.println("實現功能后的結果是:" + s);}/** 兩個明確:返回值類型:String 參數列表:String*/public static String myReverse(String s) {// 定義一個新字符串String result = "";// 把字符串轉成字符數組char[] chs = s.toCharArray();// 倒著遍歷字符串,得到每一個字符for (int x = chs.length - 1; x >= 0; x--) {// 用新字符串把每一個字符拼接起來result += chs[x];}return result;} }

15 在大串中查找小串出現的次數案例

  • 統計大串中小串出現的次數

  • 舉例:

  • 在字符串"woaijavawozhenaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagun"
  • 結果:

  • java出現了5次
  • 分析:
    前提:是已經知道了大串和小串。

    A:定義一個統計變量,初始化值是0B:先在大串中查找一次小串第一次出現的位置a:索引是-1,說明不存在了,就返回統計變量b:索引不是-1,說明存在,統計變量++C:把剛才的索引+小串的長度作為開始位置截取上一次的大串,返回一個新的字符串,并把該字符串的值重新賦值給大串D:回到B
public class StringTest7 {public static void main(String[] args) {String str1 = "woaijavawozhenaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagun";String str2 = "java";int num = 0;while(str1.contains(str2)){num++;int indexNum = str1.indexOf(str2);str1 = str1.substring(indexNum + str2.length());}System.out.println(num);} }

答案:

public class StringTest4 {public static void main(String[] args) {// 定義大串String maxString = "woaijavawozhenaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagun";// 定義小串String minString = "java";// 寫功能實現int count = getCount(maxString, minString);System.out.println("Java在大串中出現了:" + count + "次");}/** 兩個明確:返回值類型:int 參數列表:兩個字符串*/public static int getCount(String maxString, String minString) {// 定義一個統計變量,初始化值是0int count = 0;// 先在大串中查找一次小串第一次出現的位置int index = maxString.indexOf(minString);// 索引不是-1,說明存在,統計變量++while (index != -1) {count++;// 把剛才的索引+小串的長度作為開始位置截取上一次的大串,返回一個新的字符串,并把該字符串的值重新賦值給大串int startIndex = index + minString.length();maxString = maxString.substring(startIndex);// 繼續查index = maxString.indexOf(minString);}return count;} }

優化:

public class StringTest5 {public static void main(String[] args) {// 定義大串String maxString = "woaijavawozhenaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagun";// 定義小串String minString = "java";// 寫功能實現int count = getCount(maxString, minString);System.out.println("Java在大串中出現了:" + count + "次");}/** 兩個明確:返回值類型:int 參數列表:兩個字符串*/public static int getCount(String maxString, String minString) {// 定義一個統計變量,初始化值是0int count = 0;/*// 先在大串中查找一次小串第一次出現的位置int index = maxString.indexOf(minString);// 索引不是-1,說明存在,統計變量++while (index != -1) {count++;// 把剛才的索引+小串的長度作為開始位置截取上一次的大串,返回一個新的字符串,并把該字符串的值重新賦值給大串// int startIndex = index + minString.length();// maxString = maxString.substring(startIndex);maxString = maxString.substring(index + minString.length());// 繼續查index = maxString.indexOf(minString);}*/int index;//先查,賦值,判斷while((index=maxString.indexOf(minString))!=-1){count++;maxString = maxString.substring(index + minString.length());}return count;} }

StringBuilder類

1 String類拼接問題

由于String類的對象內容不可改變,所以每當進行字符串拼接時,總是會在內存中創建一個新的對象。例如:

public class StringDemo {public static void main(String[] args) {String s = "Hello";s += "World";System.out.println(s);} }

在API中對String類有這樣的描述:字符串是常量,它們的值在創建后不能被更改。

根據這句話分析我們的代碼,其實總共產生了三個字符串,即"Hello"、"World"和"HelloWorld"。引用變量s首先指向Hello對象,最終指向拼接出來的新字符串對象,即HelloWord 。

由此可知,如果對字符串進行拼接操作,每次拼接,都會構建一個新的String對象,既耗時,又浪費空間。為了解決這一問題,可以使用java.lang.StringBuilder類。


2 StringBuilder概述

查閱java.lang.StringBuilder的API,StringBuilder又稱為可變字符序列,它是一個類似于 String 的字符串緩沖區,通過某些方法調用可以改變該序列的長度和內容。

原來StringBuilder是個字符串的緩沖區,即它是一個容器,容器中可以裝很多字符串。并且能夠對其中的字符串進行各種操作。

它的內部擁有一個數組用來存放字符串內容,進行字符串拼接時,直接在數組中加入新內容。StringBuilder會自動維護數組的擴容。原理如下圖所示:(默認16字符空間,超過自動擴充)


3 構造方法

根據StringBuilder的API文檔,常用構造方法有2個:

  • public StringBuilder():構造一個空的StringBuilder容器。
  • public StringBuilder(String str):構造一個StringBuilder容器,并將字符串添加進去。
public class StringBuilderDemo {public static void main(String[] args) {StringBuilder sb1 = new StringBuilder();System.out.println(sb1); // (空白)// 使用帶參構造StringBuilder sb2 = new StringBuilder("itcast");System.out.println(sb2); // itcast} }

4 常用方法

StringBuilder常用的方法有2個:

  • public StringBuilder append(...):添加任意類型數據的字符串形式,并返回當前對象自身。
  • public String toString():將當前StringBuilder對象轉換為String對象。

append方法

append方法具有多種重載形式,可以接收任意類型的參數。任何數據作為參數都會將對應的字符串內容添加到StringBuilder中。例如:

public class Demo02StringBuilder {public static void main(String[] args) {//創建對象StringBuilder builder = new StringBuilder();//public StringBuilder append(任意類型)StringBuilder builder2 = builder.append("hello");//對比一下System.out.println("builder:"+builder);System.out.println("builder2:"+builder2);System.out.println(builder == builder2); //true// 可以添加 任何類型builder.append("hello");builder.append("world");builder.append(true);builder.append(100);// 在我們開發中,會遇到調用一個方法后,返回一個對象的情況。然后使用返回的對象繼續調用方法。// 這種時候,我們就可以把代碼現在一起,如append方法一樣,代碼如下//鏈式編程builder.append("hello").append("world").append(true).append(100);System.out.println("builder:"+builder);} }

備注:StringBuilder已經覆蓋重寫了Object當中的toString方法。

toString方法

通過toString方法,StringBuilder對象將會轉換為不可變的String對象。如:

public class Demo16StringBuilder {public static void main(String[] args) {// 鏈式創建StringBuilder sb = new StringBuilder("Hello").append("World").append("Java");// 調用方法String str = sb.toString();System.out.println(str); // HelloWorldJava} }

StringBuffer

1 StringBuffer的概述

線程安全的可變字符串。

StringBuffer的構造方法:

  • public StringBuffer():無參構造方法
  • public StringBuffer(int capacity):指定容量的字符串緩沖區對象
  • public StringBuffer(String str):指定字符串內容的字符串緩沖區對象

StringBuffer的方法:

  • public int capacity():返回當前容量。 理論值
  • public int length():返回長度(字符數)。實際值

示例:

package cn.plsite.apiTest;public class StringBufferTest {public static void main(String[] args) {// public StringBuffer():無參構造方法StringBuffer sb = new StringBuffer();System.out.println("sb:" + sb);System.out.println("sb.capacity():" + sb.capacity());System.out.println("sb.length():" + sb.length());System.out.println("--------------------------");// public StringBuffer(int capacity):指定容量的字符串緩沖區對象StringBuffer sb2 = new StringBuffer(50);System.out.println("sb2:" + sb2);System.out.println("sb2.capacity():" + sb2.capacity());System.out.println("sb2.length():" + sb2.length());System.out.println("--------------------------");// public StringBuffer(String str):指定字符串內容的字符串緩沖區對象StringBuffer sb3 = new StringBuffer("hello");System.out.println("sb3:" + sb3);System.out.println("sb3.capacity():" + sb3.capacity());System.out.println("sb3.length():" + sb3.length());} }

運行結果:

sb: sb.capacity():16 sb.length():0 -------------------------- sb2: sb2.capacity():50 sb2.length():0 -------------------------- sb3:hello sb3.capacity():21 sb3.length():5

2 StringBuffer的添加功能

  • public StringBuffer append(String str):可以把任意類型數據添加到字符串緩沖區里面,并返回字符串緩沖區本身

  • public StringBuffer insert(int offset,String str):在指定位置把任意類型的數據插入到字符串緩沖區里面,并返回字符串緩沖區本身

package cn.plsite.apiTest;public class StringBufferTest {public static void main(String[] args) {// 創建字符串緩沖區對象StringBuffer sb = new StringBuffer();// public StringBuffer append(String str)// StringBuffer sb2 = sb.append("hello");// System.out.println("sb:" + sb);// System.out.println("sb2:" + sb2);// System.out.println(sb == sb2); // true// 一步一步的添加數據// sb.append("hello");// sb.append(true);// sb.append(12);// sb.append(34.56);// 鏈式編程sb.append("hello").append(true).append(12).append(34.56);System.out.println("sb:" + sb);// public StringBuffer insert(int offset,String// str):在指定位置把任意類型的數據插入到字符串緩沖區里面,并返回字符串緩沖區本身sb.insert(5, "world");System.out.println("sb:" + sb);} }

運行結果:

sb:hellotrue1234.56 sb:helloworldtrue1234.56

3 StringBuffer的刪除功能

  • public StringBuffer deleteCharAt(int index):刪除指定位置的字符,并返回本身
  • public StringBuffer delete(int start,int end):刪除從指定位置開始指定位置結束的內容,并返回本身
public class StringBufferDemo {public static void main(String[] args) {// 創建對象StringBuffer sb = new StringBuffer();// 添加功能sb.append("hello").append("world").append("java");System.out.println("sb:" + sb);// public StringBuffer deleteCharAt(int index):刪除指定位置的字符,并返回本身// 需求:我要刪除e這個字符,腫么辦?// sb.deleteCharAt(1);// 需求:我要刪除第一個l這個字符,腫么辦?// sb.deleteCharAt(1);// public StringBuffer delete(int start,int// end):刪除從指定位置開始指定位置結束的內容,并返回本身// 需求:我要刪除world這個字符串,腫么辦?// sb.delete(5, 10);// 需求:我要刪除所有的數據sb.delete(0, sb.length());System.out.println("sb:" + sb);} }

4 StringBuffer的替換功能

  • public StringBuffer replace(int start,int end,String str):從start開始到end用str替換
public class StringBufferDemo {public static void main(String[] args) {// 創建字符串緩沖區對象StringBuffer sb = new StringBuffer();// 添加數據sb.append("hello");sb.append("world");sb.append("java");System.out.println("sb:" + sb);// public StringBuffer replace(int start,int end,String// str):從start開始到end用str替換// 需求:我要把world這個數據替換為"節日快樂"sb.replace(5, 10, "節日快樂");System.out.println("sb:" + sb);} }

5 StringBuffer的反轉功能

  • public StringBuffer reverse():StringBuffer的反轉功能
public class StringBufferDemo {public static void main(String[] args) {// 創建字符串緩沖區對象StringBuffer sb = new StringBuffer();// 添加數據sb.append("霞青林愛我");System.out.println("sb:" + sb);// public StringBuffer reverse()sb.reverse();System.out.println("sb:" + sb);} }

6 StringBuffer的截取功能

StringBuffer的截取功能:注意返回值類型不再是StringBuffer本身了

  • public String substring(int start)
  • public String substring(int start,int end)
public static void main(String[] args) {// 創建字符串緩沖區對象StringBuffer sb = new StringBuffer();// 添加元素sb.append("hello").append("world").append("java");System.out.println("sb:" + sb);// 截取功能// public String substring(int start)String s = sb.substring(5);System.out.println("s:" + s);System.out.println("sb:" + sb);// public String substring(int start,int end)String ss = sb.substring(5, 10);System.out.println("ss:" + ss);System.out.println("sb:" + sb);}

結果:

sb:helloworldjava s:worldjava sb:helloworldjava ss:world sb:helloworldjava

7 StringBuffer和String的相互轉換

String – StringBuffer
注意:不能把字符串的值直接賦值給StringBuffer

  • 方式1:通過構造方法
    StringBuffer sb = new StringBuffer(s);
  • 方式2:通過append()方法
    StringBuffer sb2 = new StringBuffer();
    sb2.append(s);

StringBuffer – String

  • 方式1:通過構造方法
    String str = new String(buffer);
  • 方式2:通過toString()方法
    String str2 = buffer.toString();
public class StringBufferTest {public static void main(String[] args) {// String -- StringBufferString s = "hello";// 注意:不能把字符串的值直接賦值給StringBuffer// StringBuffer sb = "hello";// StringBuffer sb = s;// 方式1:通過構造方法StringBuffer sb = new StringBuffer(s);// 方式2:通過append()方法StringBuffer sb2 = new StringBuffer();sb2.append(s);System.out.println("sb:" + sb);System.out.println("sb2:" + sb2);System.out.println("---------------");// StringBuffer -- StringStringBuffer buffer = new StringBuffer("java");// String(StringBuffer buffer)// 方式1:通過構造方法String str = new String(buffer);// 方式2:通過toString()方法String str2 = buffer.toString();System.out.println("str:" + str);System.out.println("str2:" + str2);} }

8 判斷一個字符串是否對稱

  • 判斷一個字符串是否是對稱字符串

  • 例如"abc"不是對稱字符串,“aba”、“abba”、“aaa”、"mnanm"是對稱字符串

  • 分析:
    判斷一個字符串是否是對稱的字符串,我只需要把
    第一個和最后一個比較
    第二個和倒數第二個比較

    比較的次數是長度除以2。

public class StringBufferTest4 {public static void main(String[] args) {// 創建鍵盤錄入對象Scanner sc = new Scanner(System.in);System.out.println("請輸入一個字符串:");String s = sc.nextLine();// 一個一個的比較boolean b = isSame(s);System.out.println("b:" + b);//用字符串緩沖區的反轉功能boolean b2 = isSame2(s);System.out.println("b2:"+b2);}public static boolean isSame2(String s) {return new StringBuffer(s).reverse().toString().equals(s);}public static boolean isSame(String s) {boolean flag = true;// 把字符串轉成字符數組char[] chs = s.toCharArray();for (int start = 0, end = chs.length - 1; start <= end; start++, end--) {if (chs[start] != chs[end]) {flag = false;break;}}return flag;} }

9 String,StringBuffer,StringBuilder的區別

  • A:String是內容不可變的,而StringBuffer,StringBuilder都是內容可變的。String類是不可變類,即一旦一個String對象被創建以后,包含在這個對象中的字符序列是不可改變的,直至這個對象被銷毀。StringBuffer對象則代表一個字符序列可變的字符串,當一個StringBuffer被創建以后,通過StringBuffer提供的append()、insert()、reverse()、setCharAt()、setLength()等方法可以改變這個字符串對象的字符序列。一旦通過StringBuffer生成了最終想要的字符串,就可以調用它的toString()方法將其轉換為一個String對象。
  • B:StringBuffer是同步的,數據安全,效率低,StringBuffer類中的方法都添加了synchronized關鍵字,也就是給這個方法添加了一個鎖,用來保證線程安全;StringBuilder是不同步的,數據不安全,效率高

Java9改進了字符串(包括String、StringBuffer、StringBuilder)的實現。在Java9以前字符串采用char[]數組來保存字符,因此字符串的每個字符占2字節;而Java9的字符串采用byte[]數組再加一個encoding-flag字段來保存字符,因此字符串的每個字符只占1字節。所以Java9的字符串更加節省空間,字符串的功能方法也沒有受到影響.

總結

以上是生活随笔為你收集整理的java练习-String类、StringBuilder类、StringBuffer类10的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美成人二区 | 初音未来打屁股 | 67194少妇在线观看 | 放荡的少妇2欧美版 | 国产夫妻视频 | 日韩一区三区 | 日韩精品v | 亚洲精品国产精品乱码在线观看 | 91蝌蚪少妇 | 亚洲综合成人在线 | 男朋友是消防员第一季 | 色偷偷免费视频 | 美女高潮黄又色高清视频免费 | 久久久久99精品 | 美女视屏 | 神马午夜电影一区二区三区在线观看 | 色网视频 | 超色视频 | 黄色片网站大全 | 午夜视频日韩 | 波多野结衣绝顶大高潮 | 综合色视频 | 含羞草一区二区 | 青青草视频污 | 亚洲免费在线观看视频 | 精品国产乱码久久久久久蜜臀网站 | 五月天色婷婷综合 | 神宫寺奈绪一区二区三区 | 国产精品揄拍100视频 | 午夜不卡在线观看 | 色婷婷中文 | 极品美女一区二区三区 | 午夜在线不卡 | 美女隐私免费网站 | xx99小雪| 久草久热| 国产在线观看免费视频软件 | www.欧美一区二区三区 | 波多野吉衣视频在线观看 | 亚洲精品88 | 日本亲近相奷中文字幕 | 亚洲天堂影院在线观看 | 欧美怡红院一区二区三区 | 国产午夜无码视频在线观看 | 色一情 | 99久久久无码国产精品6 | 99一区二区 | 超碰国产一区二区三区 | 四虎一国产精品一区二区影院 | 无码人妻熟妇av又粗又大 | 成人开心网 | 亚洲精品久久久久久无码色欲四季 | 最好看的2019年中文视频 | 伊人二区| 天堂中文在线观看 | 日韩av在线第一页 | 日韩大尺度视频 | 二区中文字幕 | 欧美日本色图 | 亚洲高清在线观看视频 | 日韩女优在线视频 | 亚洲成人1区 | 中国精品毛片 | 男人靠女人免费视频网站 | 高清久久久久久 | 好吊妞视频一区二区三区 | 在线亚洲色图 | 涩涩天堂 | 成人免费xxxxxx视频 | 欧美性猛交xxxx黑人交 | 一级艳片新婚之夜 | 国语精品久久 | 国产高清在线精品 | 毛片视频免费播放 | 色www | 亚洲一区二区三区精品视频 | 中文字幕日韩一区二区三区 | 高清国产一区二区三区 | 黄瓜视频91 | 国产伦精品 | www.av在线| 国产高清不卡一区 | 无码人妻丰满熟妇精品 | 欧美精品v国产精品v日韩精品 | 国产精品秘入口18禁麻豆免会员 | 动漫美女被吸乳奶动漫视频 | 精品人妻无码一区二区三区 | 国产精品无码白浆高潮 | 国产毛片精品国产一区二区三区 | 亚洲欧美激情在线观看 | 国产精品综合在线 | av网站在线免费看 | 天码人妻一区二区三区在线看 | 大尺码肥胖女系列av | 国产v亚洲v天堂无码 | 成人午夜精品一区二区三区 | 青青草毛片 | 亚洲欧美中日韩 | 亚洲在线色 |