Java StringBuffer類與StringBuilder類用法實(shí)例小結(jié)
本文實(shí)例總結(jié)了Java StringBuffer類與StringBuilder類用法。分享給大家供大家參考,具體如下:
StringBuffer類的構(gòu)造方法
package cn.itcast_01;
/*
* 線程安全(多線程講解)
* 安全 -- 同步 -- 數(shù)據(jù)是安全的
* 不安全 -- 不同步 -- 效率高一些
* 安全和效率問(wèn)題是永遠(yuǎn)困擾我們的問(wèn)題。
* 安全:醫(yī)院的網(wǎng)站,銀行網(wǎng)站
* 效率:新聞網(wǎng)站,論壇之類的
*
* StringBuffer:
* 線程安全的可變字符串。
*
* StringBuffer和String的區(qū)別?
* 前者長(zhǎng)度和內(nèi)容可變,后者不可變。
* 如果使用前者做字符串的拼接,不會(huì)浪費(fèi)太多的資源。
*
* StringBuffer的構(gòu)造方法:
* public StringBuffer():無(wú)參構(gòu)造方法
* public StringBuffer(int capacity):指定容量的字符串緩沖區(qū)對(duì)象
* public StringBuffer(String str):指定字符串內(nèi)容的字符串緩沖區(qū)對(duì)象
*
* StringBuffer的方法:
* public int capacity():返回當(dāng)前容量。 理論值
* public int length():返回長(zhǎng)度(字符數(shù))。 實(shí)際值
*/
public class StringBufferDemo {
public static void main(String[] args) {
// public StringBuffer():無(wú)參構(gòu)造方法
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):指定容量的字符串緩沖區(qū)對(duì)象
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):指定字符串內(nèi)容的字符串緩沖區(qū)對(duì)象
StringBuffer sb3 = new StringBuffer("hello");
System.out.println("sb3:" + sb3);
System.out.println("sb3.capacity():" + sb3.capacity());//16+5
System.out.println("sb3.length():" + sb3.length());
}
}
StringBuffer的添加功能:
package cn.itcast_02;
/*
* StringBuffer的添加功能:
* public StringBuffer append(String str):可以把任意類型數(shù)據(jù)添加到字符串緩沖區(qū)里面,并返回字符串緩沖區(qū)本身
*
* public StringBuffer insert(int offset,String str):在指定位置把任意類型的數(shù)據(jù)插入到字符串緩沖區(qū)里面,并返回字符串緩沖區(qū)本身
*/
public class StringBufferDemo {
public static void main(String[] args) {
// 創(chuàng)建字符串緩沖區(qū)對(duì)象
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
// 一步一步的添加數(shù)據(jù)
// sb.append("hello");
// sb.append(true);
// sb.append(12);
// sb.append(34.56);
// 鏈?zhǔn)骄幊?
sb.append("hello").append(true).append(12).append(34.56);
System.out.println("sb:" + sb);
// public StringBuffer insert(int offset,String
// str):在指定位置把任意類型的數(shù)據(jù)插入到字符串緩沖區(qū)里面,并返回字符串緩沖區(qū)本身
sb.insert(5, "world");
System.out.println("sb:" + sb);
}
}
StringBuffer的刪除功能
package cn.itcast_03;
/*
* StringBuffer的刪除功能
* public StringBuffer deleteCharAt(int index):刪除指定位置的字符,并返回本身
* public StringBuffer delete(int start,int end):刪除從指定位置開始指定位置結(jié)束的內(nèi)容,并返回本身
*/
public class StringBufferDemo {
public static void main(String[] args) {
// 創(chuàng)建對(duì)象
StringBuffer sb = new StringBuffer();
// 添加功能
sb.append("hello").append("world").append("java");
System.out.println("sb:" + sb);
// public StringBuffer deleteCharAt(int index):刪除指定位置的字符,并返回本身
// 需求:我要?jiǎng)h除e這個(gè)字符,腫么辦?
// sb.deleteCharAt(1);
// 需求:我要?jiǎng)h除第一個(gè)l這個(gè)字符,腫么辦?
// sb.deleteCharAt(1);
// public StringBuffer delete(int start,int
// end):刪除從指定位置開始指定位置結(jié)束的內(nèi)容,并返回本身
// 需求:我要?jiǎng)h除world這個(gè)字符串,腫么辦?
// sb.delete(5, 10);
// 需求:我要?jiǎng)h除所有的數(shù)據(jù)
sb.delete(0, sb.length());
System.out.println("sb:" + sb);
}
}
StringBuffer的替換功能:
package cn.itcast_04;
/*
* StringBuffer的替換功能:
* public StringBuffer replace(int start,int end,String str):從start開始到end用str替換
*/
public class StringBufferDemo {
public static void main(String[] args) {
// 創(chuàng)建字符串緩沖區(qū)對(duì)象
StringBuffer sb = new StringBuffer();
// 添加數(shù)據(jù)
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這個(gè)數(shù)據(jù)替換為"節(jié)日快樂(lè)"
sb.replace(5, 10, "節(jié)日快樂(lè)");
System.out.println("sb:" + sb);
}
}
StringBuffer的反轉(zhuǎn)功能:
package cn.itcast_05;
/*
* StringBuffer的反轉(zhuǎn)功能:
* public StringBuffer reverse()
*/
public class StringBufferDemo {
public static void main(String[] args) {
// 創(chuàng)建字符串緩沖區(qū)對(duì)象
StringBuffer sb = new StringBuffer();
// 添加數(shù)據(jù)
sb.append("霞青林愛(ài)我");
System.out.println("sb:" + sb);
// public StringBuffer reverse()
sb.reverse();
System.out.println("sb:" + sb);
}
}
StringBuffer的截取功能
package cn.itcast_06;
/*
* StringBuffer的截取功能:注意返回值類型不再是StringBuffer本身了
* public String substring(int start)
* public String substring(int start,int end)
*/
public class StringBufferDemo {
public static void main(String[] args) {
// 創(chuàng)建字符串緩沖區(qū)對(duì)象
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);
}
}
String和StringBuffer的相互轉(zhuǎn)換?
package cn.itcast_07;
/*
* 為什么我們要講解類之間的轉(zhuǎn)換:
* A -- B的轉(zhuǎn)換
* 我們把A轉(zhuǎn)換為B,其實(shí)是為了使用B的功能。
* B -- A的轉(zhuǎn)換
* 我們可能要的結(jié)果是A類型,所以還得轉(zhuǎn)回來(lái)。
*
* String和StringBuffer的相互轉(zhuǎn)換?
*/
public class StringBufferTest {
public static void main(String[] args) {
// String -- StringBuffer
String s = "hello";
// 注意:不能把字符串的值直接賦值給StringBuffer
// StringBuffer sb = "hello";//這個(gè)寫法錯(cuò)誤
// StringBuffer sb = s;
// 方式1:通過(guò)構(gòu)造方法
StringBuffer sb = new StringBuffer(s);
// 方式2:通過(guò)append()方法
StringBuffer sb2 = new StringBuffer();
sb2.append(s);
System.out.println("sb:" + sb);
System.out.println("sb2:" + sb2);
System.out.println("---------------");
// StringBuffer -- String
StringBuffer buffer = new StringBuffer("java");
// String(StringBuffer buffer)
// 方式1:通過(guò)構(gòu)造方法
String str = new String(buffer);
// 方式2:通過(guò)toString()方法
String str2 = buffer.toString();
System.out.println("str:" + str);
System.out.println("str2:" + str2);
}
}
使用StringBuffer把數(shù)組拼接成一個(gè)字符串
package cn.itcast_07;
/*
* 把數(shù)組拼接成一個(gè)字符串
*/
public class StringBufferTest2 {
public static void main(String[] args) {
// 定義一個(gè)數(shù)組
int[] arr = { 44, 33, 55, 11, 22 };
// 定義功能
// 方式1:用String做拼接的方式
String s1 = arrayToString(arr);
System.out.println("s1:" + s1);
// 方式2:用StringBuffer做拼接的方式
String s2 = arrayToString2(arr);
System.out.println("s2:" + s2);
}
// 用StringBuffer做拼接的方式
public static String arrayToString2(int[] arr) {
StringBuffer sb = new StringBuffer();
sb.append("[");
for (int x = 0; x < arr.length; x++) {
if (x == arr.length - 1) {
sb.append(arr[x]);
} else {
sb.append(arr[x]).append(", ");
}
}
sb.append("]");
return sb.toString();
}
// 用String做拼接的方式
public static String arrayToString(int[] arr) {
String s = "";
s += "[";
for (int x = 0; x < arr.length; x++) {
if (x == arr.length - 1) {
s += arr[x];
} else {
s += arr[x];
s += ", ";
}
}
s += "]";
return s;
}
}
把字符串反轉(zhuǎn)
package cn.itcast_07;
import java.util.Scanner;
/*
* 把字符串反轉(zhuǎn)
*/
public class StringBufferTest3 {
public static void main(String[] args) {
// 鍵盤錄入數(shù)據(jù)
Scanner sc = new Scanner(System.in);
System.out.println("請(qǐng)輸入數(shù)據(jù):");
String s = sc.nextLine();
// 方式1:用String做拼接
String s1 = myReverse(s);
System.out.println("s1:" + s1);
// 方式2:用StringBuffer的reverse()功能
String s2 = myReverse2(s);
System.out.println("s2:" + s2);
}
// 用StringBuffer的reverse()功能
public static String myReverse2(String s) {
return new StringBuffer(s).reverse().toString();
}
// 用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;
}
}
判斷一個(gè)字符串是否是對(duì)稱字符串
package cn.itcast_07;
import java.util.Scanner;
/*
* 判斷一個(gè)字符串是否是對(duì)稱字符串
* 例如"abc"不是對(duì)稱字符串,"aba"、"abba"、"aaa"、"mnanm"是對(duì)稱字符串
*
* 分析:
* 判斷一個(gè)字符串是否是對(duì)稱的字符串,我只需要把
* 第一個(gè)和最后一個(gè)比較
* 第二個(gè)和倒數(shù)第二個(gè)比較
* ...
* 比較的次數(shù)是長(zhǎng)度除以2。
*/
public class StringBufferTest4 {
public static void main(String[] args) {
// 創(chuàng)建鍵盤錄入對(duì)象
Scanner sc = new Scanner(System.in);
System.out.println("請(qǐng)輸入一個(gè)字符串:");
String s = sc.nextLine();
// 一個(gè)一個(gè)的比較
boolean b = isSame(s);
System.out.println("b:" + b);
//用字符串緩沖區(qū)的反轉(zhuǎn)功能
boolean b2 = isSame2(s);
System.out.println("b2:"+b2);
}
//用字符串緩沖區(qū)的反轉(zhuǎn)功能
public static boolean isSame2(String s) {
return new StringBuffer(s).reverse().toString().equals(s);
}
// 一個(gè)一個(gè)的比較
public static boolean isSame(String s) {
boolean flag = true;
// 把字符串轉(zhuǎn)成字符數(shù)組
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;
}
}
String,StringBuffer,StringBuilder的區(qū)別?
package cn.itcast_08;
/*
* 面試題:
* 1:String,StringBuffer,StringBuilder的區(qū)別?
* A:String是內(nèi)容不可變的,而StringBuffer,StringBuilder都是內(nèi)容可變的。
* B:StringBuffer是同步的,數(shù)據(jù)安全,效率低;StringBuilder是不同步的,數(shù)據(jù)不安全,效率高
*
* 2:StringBuffer和數(shù)組的區(qū)別?
* 二者都可以看出是一個(gè)容器,裝其他的數(shù)據(jù)。
* 但是呢,StringBuffer的數(shù)據(jù)最終是一個(gè)字符串?dāng)?shù)據(jù)。
* 而數(shù)組可以放置多種數(shù)據(jù),但必須是同一種數(shù)據(jù)類型的。
*
* 3:形式參數(shù)問(wèn)題
* String作為參數(shù)傳遞
* StringBuffer作為參數(shù)傳遞
*
* 形式參數(shù):
* 基本類型:形式參數(shù)的改變不影響實(shí)際參數(shù)
* 引用類型:形式參數(shù)的改變直接影響實(shí)際參數(shù)
*
* 注意:
* String作為參數(shù)傳遞,效果和基本類型作為參數(shù)傳遞是一樣的。雖然String是特殊的引用類型,但是可以看成基本類型
*/
public class StringBufferDemo {
public static void main(String[] args) {
String s1 = "hello";
String s2 = "world";
System.out.println(s1 + "---" + s2);// hello---world
change(s1, s2);
System.out.println(s1 + "---" + s2);// hello---world
StringBuffer sb1 = new StringBuffer("hello");
StringBuffer sb2 = new StringBuffer("world");
System.out.println(sb1 + "---" + sb2);// hello---world
change(sb1, sb2);
System.out.println(sb1 + "---" + sb2);// hello---worldworld
}
public static void change(StringBuffer sb1, StringBuffer sb2) {
sb1 = sb2;//直接賦值不會(huì)改變外面的sb1
sb2.append(sb1);//作操作會(huì)改變
}
public static void change(String s1, String s2) {
s1 = s2;
s2 = s1 + s2;
}
}
更多關(guān)于java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java字符與字符串操作技巧總結(jié)》、《Java數(shù)組操作技巧總結(jié)》、《Java數(shù)學(xué)運(yùn)算技巧總結(jié)》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》及《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》
希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。
- 全面解釋java中StringBuilder、StringBuffer、String類之間的關(guān)系
- Java中StringBuilder字符串類型的操作方法及API整理
- 詳細(xì)分析Java中String、StringBuffer、StringBuilder類的性能
- Java StringBuilder類原理及常用方法
- java StringBuilder類的詳解及簡(jiǎn)單實(shí)例
- 辨析Java中的String與StringBuffer及StringBuilder字符串類
- Java StringBuilder類相關(guān)知識(shí)總結(jié)
- JAVA基礎(chǔ)類庫(kù)之String類,StringBuffer類和StringBuilder類
- Java詳細(xì)分析String類與StringBuffer和StringBuilder的使用方法
- Java中StringBuilder類的介紹與常用方法
相關(guān)文章
SpringJPA?做分頁(yè)條件查詢的代碼實(shí)踐
相信小伙伴們的項(xiàng)目很多都用到SpringJPA框架的吧,對(duì)于單表的增刪改查利用jpa是很方便的,但是對(duì)于條件查詢并且分頁(yè)?是不是很多小伙伴不經(jīng)常寫到,今天給大家分享SpringJPA?做分頁(yè)條件查詢的案例代碼,感興趣的朋友一起看看吧2024-03-03
Shiro在springboot中快速實(shí)現(xiàn)方法
Apache Shiro是一個(gè)Java的安全(權(quán)限)框架,可以容易的開發(fā)出足夠好的應(yīng)用,既可以在JavaEE中使用,也可以在JavaSE中使用,這篇文章主要介紹了Shiro在springboot中快速實(shí)現(xiàn),需要的朋友可以參考下2023-02-02
mybatis-plus 處理大數(shù)據(jù)插入太慢的解決
這篇文章主要介紹了mybatis-plus 處理大數(shù)據(jù)插入太慢的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
Java+mysql本地圖片上傳數(shù)據(jù)庫(kù)及下載示例
本篇文章主要介紹了Java+mysql本地圖片上傳數(shù)據(jù)庫(kù)及下載示例,具有一定的參加價(jià)值,有興趣的可以了解一下。2017-01-01
SpringBoot+MyBatis簡(jiǎn)單數(shù)據(jù)訪問(wèn)應(yīng)用的實(shí)例代碼
這篇文章主要介紹了SpringBoot+MyBatis簡(jiǎn)單數(shù)據(jù)訪問(wèn)應(yīng)用的實(shí)例代碼,需要的朋友可以參考下2017-05-05
Intellij Idea修改代碼方法參數(shù)自動(dòng)提示快捷鍵的操作
這篇文章主要介紹了Intellij Idea修改代碼方法參數(shù)自動(dòng)提示快捷鍵的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-01-01
JS求多個(gè)數(shù)組的重復(fù)數(shù)據(jù)
這篇文章主要介紹了JS求多個(gè)數(shù)組的重復(fù)數(shù)據(jù)的辦法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09

