Java基础:String类
相關(guān)閱讀
1. 概述
字符串是由多個字符組成的一串?dāng)?shù)據(jù)(字符序列),字符串可以看成是字符數(shù)組。
在實(shí)際開發(fā)中,字符串的操作是最常見的操作,沒有之一。而Java沒有內(nèi)置的字符串類型,所以,就在Java類庫中提供了一個類String 供我們來使用。String 類代表字符串。
2. String類的特點(diǎn)
- 字符串是常量,它的值在創(chuàng)建之后不能更改
- Java 程序中的所有字符串字面值(如 “abc” )都作為此類的實(shí)例實(shí)現(xiàn)。
- 字符串如果是變量相加,先開空間,在拼接。
- 字符串如果是常量相加,是先加,然后在常量池找,如果有就直接返回,否則,就創(chuàng)建。
字符串在內(nèi)存中1
字符串在內(nèi)存中2
3. 常見操作方法
3.1 構(gòu)造方法
| String() | 創(chuàng)建一個內(nèi)容為空的字符串 |
| String(byte[]) | 根據(jù)指定的字節(jié)數(shù)組創(chuàng)建對象 |
| String(byte[],int,int) | 根據(jù)字節(jié)數(shù)組的一部分創(chuàng)建對象 |
| String(char[]) | 根據(jù)指定的字符數(shù)組創(chuàng)建對象 |
| String(char[],int,int) | 根據(jù)字符數(shù)組的一部分創(chuàng)建對象 |
| String(String) | 根據(jù)指定的字符串內(nèi)容創(chuàng)建對象 |
運(yùn)行結(jié)果:
3.2 判斷功能
| equals() | 比較字符串的內(nèi)容是否相等,區(qū)分大小寫 |
| equalsIgnoreCase() | 比較字符串的內(nèi)容是否相等,忽略大小寫 |
| contains(String str) | 判斷大字符串中是否包含小字符串 |
| startsWith() | 判斷字符串是否以某個字符串開頭 |
| endsWith() | 判斷字符串是否以某個字符串結(jié)尾 |
| isEmpty() | 判斷字符串是否為空 |
運(yùn)行結(jié)果:
3.3 獲取功能
| length() | 獲取字符串長度 |
| charAt(int index) | 獲取指定位置的字符 |
| indexOf(int ch) | 字符第一次出現(xiàn)的索引 |
| indexOf(String str) | 字符串第一次出現(xiàn)的索引 |
| indexOf(int ch,int fromIndex) | 字符從指定位置后第一次出現(xiàn)的索引 |
| indexOf(String str,int from) | 字符串從指定位置后第一次出現(xiàn)的索引 |
| lastIndexOf() | 字符串最后一次出現(xiàn)的索引 |
| subString(int start) | 從指定位置開始截取字符串 |
| subString(int start,int end) | 截取字符串,包左不包右 |
運(yùn)行結(jié)果:
3.4 轉(zhuǎn)換功能
| getBytes() | 把字符串轉(zhuǎn)成字節(jié)數(shù)組 |
| getCharArray() | 把字符串轉(zhuǎn)成字符數(shù)組 |
| valueOf(char[] chs) | 把字符數(shù)組轉(zhuǎn)成字符串 |
| valueOf(int i) | 把int類型的數(shù)據(jù)轉(zhuǎn)成字符串 |
| toLowerCase() | 把字符串轉(zhuǎn)成小寫 |
| toUpperCase() | 把字符串轉(zhuǎn)成大寫 |
| concat(String str) | 字符串拼接 |
運(yùn)行結(jié)果:
3.5 其他功能
| replace(char old,char new) | 替換字符 |
| replace(String old,String new) | 替換字符串 |
| trim() | 去掉字符串兩端空格 |
| compareTo() | 按字典順序比較字符串 |
| compareToIngnoreCase() | 按字典順序比較字符串,忽略大小寫 |
| format() | 格式化字符串 |
更多關(guān)于字符串格式化的內(nèi)容,請看 Java字符串格式化String.format()的使用
package cn.itcast_06; /* * String類的其他功能: * * 替換功能: * String replace(char old,char new) * String replace(String old,String new) * * 去除字符串兩空格 * String trim() * * 按字典順序比較兩個字符串 * int compareTo(String str) * int compareToIgnoreCase(String str) */ public class StringDemo { public static void main(String[] args) { // 替換功能 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));// 0 System.out.println(s6.compareTo(s8));// 7 System.out.println(s6.compareTo(s9));// -16 } }運(yùn)行結(jié)果:
4. String類練習(xí)
4.1 把數(shù)組中的數(shù)據(jù)按照指定個格式拼接成一個字符串
package cn.itcast_07; /* * 需求:把數(shù)組中的數(shù)據(jù)按照指定個格式拼接成一個字符串 * 舉例: * int[] arr = {1,2,3}; * 輸出結(jié)果: * "[1, 2, 3]" * 分析: * A:定義一個字符串對象,只不過內(nèi)容為空 * B:先把字符串拼接一個"[" * C:遍歷int數(shù)組,得到每一個元素 * D:先判斷該元素是否為最后一個 * 是:就直接拼接元素和"]" * 不是:就拼接元素和逗號以及空格 * E:輸出拼接后的字符串 * * 把代碼用功能實(shí)現(xiàn)。 */ public class StringTest2 { public static void main(String[] args) { // 前提是數(shù)組已經(jīng)存在 int[] arr = { 1, 2, 3 }; // 寫一個功能,實(shí)現(xiàn)結(jié)果 String result = arrayToString(arr); System.out.println("最終結(jié)果是:" + result); } /* * 兩個明確: 返回值類型:String 參數(shù)列表:int[] arr */ public static String arrayToString(int[] arr) { // 定義一個字符串 String s = ""; // 先把字符串拼接一個"[" s += "["; // 遍歷int數(shù)組,得到每一個元素 for (int x = 0; x < arr.length; x++) { // 先判斷該元素是否為最后一個 if (x == arr.length - 1) { // 就直接拼接元素和"]" s += arr[x]; s += "]"; } else { // 就拼接元素和逗號以及空格 s += arr[x]; s += ", "; } } return s; } }4.2 字符串反轉(zhuǎn)
package cn.itcast_07; import java.util.Scanner; /* * 字符串反轉(zhuǎn) * 舉例:鍵盤錄入”abc” * 輸出結(jié)果:”cba” * * 分析: * A:鍵盤錄入一個字符串 * B:定義一個新字符串 * C:倒著遍歷字符串,得到每一個字符 * a:length()和charAt()結(jié)合 * b:把字符串轉(zhuǎn)成字符數(shù)組 * D:用新字符串把每一個字符拼接起來 * E:輸出新串 */ public class StringTest3 { public static void main(String[] args) { // 鍵盤錄入一個字符串 Scanner sc = new Scanner(System.in); System.out.println("請輸入一個字符串:"); String line = sc.nextLine(); /* // 定義一個新字符串 String result = ""; // 把字符串轉(zhuǎn)成字符數(shù)組 char[] chs = line.toCharArray(); // 倒著遍歷字符串,得到每一個字符 for (int x = chs.length - 1; x >= 0; x--) { // 用新字符串把每一個字符拼接起來 result += chs[x]; } // 輸出新串 System.out.println("反轉(zhuǎn)后的結(jié)果是:" + result); */ // 改進(jìn)為功能實(shí)現(xiàn) String s = myReverse(line); System.out.println("實(shí)現(xiàn)功能后的結(jié)果是:" + s); } /* * 兩個明確: 返回值類型:String 參數(shù)列表:String */ public static String myReverse(String s) { // 定義一個新字符串 String result = ""; // 把字符串轉(zhuǎn)成字符數(shù)組 char[] chs = s.toCharArray(); // 倒著遍歷字符串,得到每一個字符 for (int x = chs.length - 1; x >= 0; x--) { // 用新字符串把每一個字符拼接起來 result += chs[x]; } return result; } }4.3 統(tǒng)計(jì)大串中小串出現(xiàn)的次數(shù)
package cn.itcast_07; /* * 統(tǒng)計(jì)大串中小串出現(xiàn)的次數(shù) * 舉例: * 在字符串"woaijavawozhenaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagun" * 結(jié)果: * java出現(xiàn)了5次 * * 分析: * 前提:是已經(jīng)知道了大串和小串。 * * A:定義一個統(tǒng)計(jì)變量,初始化值是0 * B:先在大串中查找一次小串第一次出現(xiàn)的位置 * a:索引是-1,說明不存在了,就返回統(tǒng)計(jì)變量 * b:索引不是-1,說明存在,統(tǒng)計(jì)變量++ * C:把剛才的索引+小串的長度作為開始位置截取上一次的大串,返回一個新的字符串,并把該字符串的值重新賦值給大串 * D:回到B */ public class StringTest5 { public static void main(String[] args) { // 定義大串 String maxString = "woaijavawozhenaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagun"; // 定義小串 String minString = "java"; // 寫功能實(shí)現(xiàn) int count = getCount(maxString, minString); System.out.println("Java在大串中出現(xiàn)了:" + count + "次"); } /* * 兩個明確: 返回值類型:int 參數(shù)列表:兩個字符串 */ public static int getCount(String maxString, String minString) { // 定義一個統(tǒng)計(jì)變量,初始化值是0 int count = 0; /* // 先在大串中查找一次小串第一次出現(xiàn)的位置 int index = maxString.indexOf(minString); // 索引不是-1,說明存在,統(tǒng)計(jì)變量++ while (index != -1) { count++; // 把剛才的索引+小串的長度作為開始位置截取上一次的大串,返回一個新的字符串,并把該字符串的值重新賦值給大串 // int startIndex = index + minString.length(); // maxString = maxString.substring(startIndex); maxString = maxString.substring(index + minString.length()); // 繼續(xù)查 index = maxString.indexOf(minString); } */ int index; //先查,賦值,判斷 while((index=maxString.indexOf(minString))!=-1){ count++; maxString = maxString.substring(index + minString.length()); } return count; } }5. StringBuffer
我們?nèi)绻麑ψ址M(jìn)行拼接操作,每次拼接,都會構(gòu)建一個新的String對象,既耗時,又浪費(fèi)空間。而StringBuffer就可以解決這個問題
- StringBuffer是線程安全的可變字符序列。
- StringBuffer和String的區(qū)別?
前者長度和內(nèi)容可變,后者不可變。如果使用前者做字符串的拼接,不會浪費(fèi)太多的資源。
6. 常見操作方法
6.1 構(gòu)造方法和獲取方法
package cn.itcast_01; /* * StringBuffer: * 線程安全的可變字符串。 * * StringBuffer和String的區(qū)別? * 前者長度和內(nèi)容可變,后者不可變。 * 如果使用前者做字符串的拼接,不會浪費(fèi)太多的資源。 * * StringBuffer的構(gòu)造方法: * public StringBuffer():無參構(gòu)造方法 * public StringBuffer(int capacity):指定容量的字符串緩沖區(qū)對象 * public StringBuffer(String str):指定字符串內(nèi)容的字符串緩沖區(qū)對象 * * StringBuffer的獲取方法: * public int capacity():返回當(dāng)前容量。 理論值 * public int length():返回長度(字符數(shù))。 實(shí)際值 */ public class StringBufferDemo { public static void main(String[] args) { // public StringBuffer():無參構(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ū)對象 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ū)對象 StringBuffer sb3 = new StringBuffer("hello"); System.out.println("sb3:" + sb3); System.out.println("sb3.capacity():" + sb3.capacity()); System.out.println("sb3.length():" + sb3.length()); } }6.2 添加功能
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ū)對象 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); } }運(yùn)行結(jié)果:
6.3 刪除功能
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)建對象 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):刪除從指定位置開始指定位置結(jié)束的內(nèi)容,并返回本身 // 需求:我要刪除world這個字符串,腫么辦? // sb.delete(5, 10); // 需求:我要刪除所有的數(shù)據(jù) sb.delete(0, sb.length()); System.out.println("sb:" + sb); } }運(yùn)行結(jié)果:
6.4 替換功能
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ū)對象 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這個數(shù)據(jù)替換為"節(jié)日快樂" sb.replace(5, 10, "節(jié)日快樂"); System.out.println("sb:" + sb); } }運(yùn)行結(jié)果:
6.5 反轉(zhuǎn)功能
package cn.itcast_05; /* * StringBuffer的反轉(zhuǎn)功能: * public StringBuffer reverse() */ public class StringBufferDemo { public static void main(String[] args) { // 創(chuàng)建字符串緩沖區(qū)對象 StringBuffer sb = new StringBuffer(); // 添加數(shù)據(jù) sb.append("霞青林愛我"); System.out.println("sb:" + sb); // public StringBuffer reverse() sb.reverse(); System.out.println("sb:" + sb); } }運(yùn)行結(jié)果:
6.6 截取功能
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ū)對象 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); } }運(yùn)行結(jié)果:
7. StringBuffer類練習(xí)
7.1 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)回來。 * * String和StringBuffer的相互轉(zhuǎn)換? */ public class StringBufferTest { public static void main(String[] args) { // String -- StringBuffer String s = "hello"; // 注意:不能把字符串的值直接賦值給StringBuffer // StringBuffer sb = "hello"; // StringBuffer sb = s; // 方式1:通過構(gòu)造方法 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 -- String StringBuffer buffer = new StringBuffer("java"); // String(StringBuffer buffer) // 方式1:通過構(gòu)造方法 String str = new String(buffer); // 方式2:通過toString()方法 String str2 = buffer.toString(); System.out.println("str:" + str); System.out.println("str2:" + str2); } }運(yùn)行結(jié)果:
7.2 把數(shù)組拼接成一個字符串
package cn.itcast_07; /* * 把數(shù)組拼接成一個字符串 */ public class StringBufferTest2 { public static void main(String[] args) { // 定義一個數(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; } }運(yùn)行結(jié)果:
7.3 把字符串反轉(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("請輸入數(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) { // StringBuffer sb = new StringBuffer(); // sb.append(s); // StringBuffer sb = new StringBuffer(s); // sb.reverse(); // return sb.toString(); // 簡易版 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--) { // char ch = chs[x]; // result += ch; result += chs[x]; } return result; } }運(yùn)行結(jié)果:
7.4 判斷一個字符串是否是對稱字符串
package cn.itcast_07; import java.util.Scanner; /* * 判斷一個字符串是否是對稱字符串 * 例如"abc"不是對稱字符串,"aba"、"abba"、"aaa"、"mnanm"是對稱字符串 * * 分析: * 判斷一個字符串是否是對稱的字符串,我只需要把 * 第一個和最后一個比較 * 第二個和倒數(shù)第二個比較 * ... * 比較的次數(shù)是長度除以2。 */ public class StringBufferTest4 { public static void main(String[] args) { // 創(chuàng)建鍵盤錄入對象 Scanner sc = new Scanner(System.in); System.out.println("請輸入一個字符串:"); String s = sc.nextLine(); // 一個一個的比較 boolean b = isSame(s); System.out.println("b:" + b); //用字符串緩沖區(qū)的反轉(zhuǎn)功能 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) { // // 把字符串轉(zhuǎn)成字符數(shù)組 // char[] chs = s.toCharArray(); // // for (int start = 0, end = chs.length - 1; start <= end; start++, end--) { // if (chs[start] != chs[end]) { // return false; // } // } // // return true; // } 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; } }運(yùn)行結(jié)果:
總結(jié)
以上是生活随笔為你收集整理的Java基础:String类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: XML约束
- 下一篇: ImageView no longer