---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity開發</a>、<a href="http://www.itheima.com"target="blank">.Net培訓</a>、期待與您交流! ----------------------
String類
字符串類同於描述字符串事物。如姓名等。
字符串是一個特殊的對象
字符串一旦初始化就不可以被改變,即一個字符串常量。
字符串是常量;它們的值在創建之後不能更改。
字符串緩衝區支持可變的字符串。因爲 String 對象是不可變的,所以可以共享。
例如:
String str = "abc";
等效於:
char data[] = {'a', 'b', 'c'};
String str = new String(data);
即,此處有4個對象。
String s1 = "abc"//s1是一個類類型對象,"abc"是一個對象。
s1 = "kk"。此時改變的不是"abc"對象,而是str所執行的對象地址。
String s2 = new String("abc");
s1 與 s2的區別。
s1在內存中有一個對象。
s2在內存中有兩個對象。
注:String類是一個終類,即不能被繼承。
String類常見的操作:
1,獲取:
1.1,字符串中包含的字符數,也就是字符串的長度。
int length()--獲取長度。1.2,根據位置獲取位置上的某個字符。
char charAt(int index)1.3,根據字符獲取在字符串中的位置。
int indexOf(int ch)--返回的是ch在字符串中第一次出現的位置。--從fromIndex指定的位置開始,獲得ch在字符串中出現的位置。
int indexOf(char ch,int fromIndex)--返回的是str在字符串中第一次出現的位置。
int indexOf(String str)--從fromIndex指定的位置開始,獲得str在字符串中第一次出現的位置。
int indexOf(String str,int fromIndex)--獲得字符串中最後一個字符(也可以是字符串)ch出現的位置
int lastIndexOf(char ch)。2,判斷:
2.1,字符串中是否包含某一個子串
boolean contains(String str)特殊之處:indexOf(String str):可以索引str第一次出現的位置,如果返回-1表示str不在字符串中。
所以,也可以用於判斷字符串中是否包含指定的子串。if(str.indexOf("a") != -1)
且該方法既可以判斷,也可以獲取子串出現的位置。
2.2,字符串中是否有內容。boolean isEmpty():原理是判斷字符串長度是否爲0.(1.6版本後纔有)
2.3,字符串是否是一指定內容開頭。
boolean startWith(String str)2.4,字符串是否是一指定內容結尾。
boolean endWith(String str)2.5,判斷字符串內容是否相等,覆寫了Object類中的toString()方法。
boolean equals(String str)2.6,判斷字符串內容是否相等,並忽略大小寫。
boolean equalsIgnoreCase(String str)
3,轉換:3.1,將字符串數組轉成字符串。
構造函數:String(char[])
//將字符數組中的從offset位置的count個字符轉成字符串。
String(char[] chs,int offset,int count)靜態方法:
//返回指定數組中表示該字符序列的 String。static String copyValueOf(char[] chs);
//返回指定數組中一部分表示該字符序列的 String。static String copyValueOf(char[] chs,int offset,int count)
static String valueOf(char[] chs);3.2,將字符串轉成字符數組。
char[] toCharArray();
3.3,將字節數組轉換成字符串。String(byte[] bs)
//將字節數組中的一部分轉成字符串String(byte[] bs,int offset,int count)
3.4,將字符串轉成字節數組byte[] getBytes();
3.5,將基本數據類型轉成字符串。static String valueOf(int)
static String valueOf(double).
.
.
特殊:字符串和字節數組在轉換過程中,是可以指定編碼表的。
4,替換:
4.1String replace(oldchar,newchar);5,切割:
5.1String[] split(String str);6,子串,獲取字符串中的一部分:
//從begin開始截取到字符串末尾。6.1String substring(int begin);
//從begin位置開始截取到end-1.6.2String substring(int begin,int end);包含頭,不包含尾。!!
7,大小寫轉換,取出空格,比較。
7.1,大小寫轉換
//轉成大寫String toUpperCase();
//轉成小寫String toLowerCase();
7.2,將字符串兩端空格去掉。
String trim();7.3,對兩個字符串進行字典比較
//區分大小寫比較String compareTo(String str);
//不區分大小寫比較String compareToIgnoreCase(String str);
示例代碼:
package com.itheima.stringdemos;
import java.util.Arrays;
/**
* 字符串中常用操作的測試類
* @author wuyong
*
*/
public class StringTest {
/**
* @param args
*/
public static void main(String[] args) {
String str = "abcsfgae3";
sop("=================獲取=================");
// 1.1,字符串中包含的字符數,也就是字符串的長度。
sop(str.length());
// 1.2,根據位置獲取位置上的某個字符。
sop(str.charAt(3));
// 1.3,根據字符獲取在字符串中的位置。
sop("f的位置--" + str.indexOf('f'));
// 從fromIndex指定的位置開始,獲得ch在字符串中出現的位置。
sop("e的位置--" + str.indexOf('e', 3));
// --返回的是str在字符串中第一次出現的位置。
sop("cs的位置--" + str.indexOf("cs"));
// --從fromIndex指定的位置開始,獲得str在字符串中第一次出現的位置。
sop("bc的位置--" + str.indexOf("bc",4));
// --獲得字符串中最後一個字符(也可以是字符串)ch出現的位置
sop("最後a的位置--" + str.lastIndexOf('a'));
sop("=================判斷=================");
// 2.1,字符串中是否包含某一個子串
sop("fg是否存在--" + str.contains("fg"));
// 2.2,字符串中是否有內容。
sop("str是否爲空字符串--" + str.isEmpty());
// 2.3,字符串是否是一指定內容開頭。
sop("str是否已12開頭的位置--" + str.startsWith("12"));
// 2.4,字符串是否是一指定內容結尾。
sop("字符串str是否以es結尾--" + str.endsWith("es"));
// 2.5,判斷字符串內容是否相等,覆寫了Object類中的toString()方法。
sop("字符串str是否等於asd--" + str.equals("asd"));
// 2.6,判斷字符串內容是否相等,並忽略大小寫。
sop("str忽略大小寫是否等於abcsFGaE3--" + str.equalsIgnoreCase("abcsFGaE3"));
sop("=================轉換=================");
// 3.1,將字符串數組轉成字符串。
char[] chs = {'a','2','s','e'};
String chsStr = new String(chs);
sop("構造函數下chsStr--" + chsStr);
// //將字符數組中的從offset位置的count個字符轉成字符串。
chsStr = new String(chs,2,2);
sop("多參構造函數chsStr--" + chsStr);
// 靜態方法:
sop("copyValueOf(char[] chs)方法chsStr--" + String.copyValueOf(chs));
sop("copyValueOf(char[] chs,off,count)chsStr--" + String.copyValueOf(chs,1,2));
sop("valueOf==chsStr--" + String.valueOf(chs));
// 3.2,將字符串轉成字符數組。
char[] chs2 = chsStr.toCharArray();
for (char c : chs2) {
sop(c);
}
// 3.3,將字節數組轉換成字符串。
byte[] bs = {98,49,112,97};
sop("String(byte[] bs) --" + new String(bs));;
// //將字節數組中的一部分轉成字符串
sop("String(byte[] bs,off,count) --" + new String(bs,0,3));
// 3.4,將字符串轉成字節數組
byte[] bs2 = new String(bs).getBytes();
for (byte b : bs2) {
sop(b);
}
// 3.5,將基本數據類型轉成字符串。
sop(String.valueOf(3));
sop(String.valueOf(12.45));
// .
// .
// .
// 特殊:字符串和字節數組在轉換過程中,是可以指定編碼的
}
/**
* 自定義輸出方法,封裝了System.out.println()語句
* @param obj
*/
public static void sop(Object obj) {
System.out.println(obj);
}
}
StringBuffer
StringBuffer是字符串緩衝區,是一個容器,
線程安全的可變字符序列。特點:
1,其長度是可以變化的。
2,可以操作多個數據類型。3,最終或通過toString方法變成字符串。
通常會有一下操作:
1,C create 增加
2,U update 修改3,R read 查看
4,D delete 刪除
1,存儲:
1,初始化時的,傳入參數可以存儲。new StringBuffer(形參)2,StringBuffer append(形參);將指定數據作爲參數添加到數據結尾處。
3,StringBuffer insert(index,數據):將數據插入到指定位置index處。2,刪除:
StringBuffer delete(int start,int end):刪除緩衝區中的數據,包含start,包含end。
StringBuffer deleteCharAt(int index):刪除指定位置的字符。
3,獲取:char charAt(int index):獲取指定位置的字符
int indexOf(String str):獲取指定字符串的位置int lastIndexOf(String str):獲取指定字符串的最後出現的位置
int length():獲取緩衝區的長度。String substring(int start,int end):獲取字符串中start開始到end位置的子串。
4,修改:StringBuffer repalce(int start,int end,String str);將start位置到end位置替換成str字符串。
void setChartAt(int index,char ch):將指定位置的子符替換成ch。5,反轉:
StringBuffer reverse():反轉。
StringBuffer與StringBuilder的區別和關係:
StringBuilder:
StringBuilder是JDK1.5新加的功能,目的在於提高對字符串的操作的效率。
區別:1,StringBuffer在多線程時,線程安全的可變字符序列,但是由於同步的原因,每次都要判斷鎖,所以效率較低。
2,StringBuilder 是線程不安全的,但是效率比StringBuffer高,開發中優先使用它。關係:
StringBuilder提供了與StringBuffer提供了兼容的功能。示例代碼:
package com.itheima.stringdemos;
/**
* StringBuffer的相關操作
* @author wuyong
*
*/
public class StringBufferTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
sop("--------------存儲----------------");
buffer_add();
sop("--------------刪除----------------");
buffer_del();
sop("--------------獲取----------------");
buffer_get();
sop("--------------修改----------------");
buffer_modify();
sop("--------------反轉----------------");
buffer_reverse();
}
/**
* 存儲
*/
private static void buffer_add() {
//初始化時添加數據
StringBuffer sb = new StringBuffer("abc");
//用append方法添加到數據末尾。
sb.append('t').append(true).append(123);
//用insert方法將指定值插入到指定位置。
sb.insert(2, "QQ");
sop("存儲--》sb == " + sb);
}
/**
* 刪除
*/
public static void buffer_del() {
StringBuffer sb = new StringBuffer("abcdefg123345");
sop("刪除前--》" + sb);
sb.delete(2, 5);
sop("delete(int start,int end):刪除後--》" + sb);
sb.deleteCharAt(8);
sop("deleteCharAt(int index):刪除後--》" + sb);
//清空StringBuffer
sop("清空後的長度--》" + sb.delete(0, sb.length()).length());
}
/**
* 獲取
*/
public static void buffer_get() {
StringBuffer sb = new StringBuffer("abcdefag123345");
sop("sb是--》" + sb);
//char charAt(int index);獲取指定位置的字符
sop("下標爲2的字符是--》" + sb.charAt(2));
//int indexOf(String str):獲取指定字符串的位置
sop("字符串“123”的開始位置是--》" + sb.indexOf("123"));
//int lastIndexOf(String str):獲取指定字符串的最後出現的位置
sop("最後一個a出現的位置是--》" + sb.lastIndexOf("a"));
//int length():獲取緩衝區的長度。
sop("sb的長度是--》" + sb.length());
//String substring(int start,int end):獲取字符串中start開始到end位置的子串。
sop("sb中下標2到6的字符串是--》" + sb.substring(2, 6));
}
/**
* 修改
*/
public static void buffer_modify() {
StringBuffer sb = new StringBuffer("abcde");
sop("sb在替換前--》" + sb);
sop("sb調用repace替換後是--》" + sb.replace(1, 3, "12"));
sb.setCharAt(0, 'W');
sop("sb調用setCharAt替換後是--》" + sb);
}
/**
* 反轉
*/
public static void buffer_reverse() {
StringBuffer sb = new StringBuffer("12345");
sop("sb反轉前是--》" + sb);
sop("sb反轉後是--》" + sb.reverse());
}
/**
* 自定義的輸出的方法
* @param obj
*/
public static void sop(Object obj) {
System.out.println(obj);
}
}
---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity開發</a>、<a href="http://www.itheima.com"target="blank">.Net培訓</a>、期待與您交流! ----------------------