下面小編就為大家帶來一篇老生常談Java字串進階(必看篇)。小編覺得蠻不錯的,現在就分享給大家,也給大家做個參考。一起跟著小編過來看看吧
前言
#最常用的對字串運算的類別有三個,分別是String,StringBuilder ,StringBuffer,下面將會詳細的說說這三個類別......
String
String類別代表字串,這個是最基本的對字串的類,這個也是使用比較多的類,這裡就不再詳細介紹了
構造
#new String(String str)
new String(StringBuilder str)
new String(StringBuffer str)
new String(byte[] bys,String charsetName) 透過使用指定的
字元集常用方法
str charAt(int index) 傳回指定索引處的字元
String concat(String str)將指定字串str連接到此字串的結尾,傳回連接成功後的字符,因此需要接受才能有效果
boolean contains(CharSequence s) 判斷此字串是否包含指定的char值序列,這裡的CharSequence是一個接口,可以直接使用它的子類別作為參數(String,StringBuffer,StringBuild)
static String copyValueOf(char[] c) 將
字元陣列變成字符字串並且傳回
static String copyValueOf(char[] c,int off,int count) 將截取的字元陣列變成字串並且傳回,off是開始截取的下標,count是截取的個數
boolean endWith(String s) 判斷字串是否是以s結尾
boolean equals(Object o) 用來比較int indexOf(char c) 傳回字元c在字串中第一次出現的索引
int indexOf(char c,int fromIndex) 從指定索引處開始搜索,尋找第一次出現的索引
int indexOf(String str ) 傳回指定子字串在此字串中第一次出現處的索引。
int indexOf(String str,int fromIndex) 傳回指定子字串在此字串中第一次出現處的索引,從指定的索引開始。
boolean isEmpty()
int length()
boolean matches(String regex) 是否符合
正規表示式#trim () 傳回字串的副本,忽略前導空白和尾部空白。
String substring(int beginIndex) 傳回一個新的字串,它是此字串的一個子字串。 String substring(int beginIndex, int endIndex) 傳回一個新字串,它是此字串的子字串。 String toUpperCase() 使用預設語言環境的規則將此 String 中的所有字元轉換為大寫。
String[] split(String regex) 根據給定正規表示式的符合拆分此字串。 String[] split(String regex, int limit) 根據符合給定的正規表示式來拆分此字串。
char[] toCharArray() 將此字串轉換為一個新的字元陣列。
#注意
上面的new String(byte[] bys,String charsetName)這個
建構方法很重要,它可以改變字串的編碼集(和byte[] getBytes (Charset charset))配合使用,下面我們來看一個例子,程式碼如下:
/*
* InputStreamReader实现了将字节流FileInputStream转换为字符流,然后使用转换来的字节流创建高效流,从而实现高效的读写
*/
/*
* 编码集(我的eclipse编辑器默认的是utf-8
* 下面将中文字符串的编码集变为GBK写入a.txt文件,因为a.txt默认的是utf-8的因此这里在文件中显示的是乱码
* 然后我们读出来的还是GBK的,因为我们写入的是GBK编码集的,但是我的eclipse是utf-8的编码集,因此在控制台上输出的还是乱码
* new String(byte[] bys,String
* charsetName)使用这个构造方法将byte数组改变编码集并且转换为utf-8格式的,那么这次在控制台上输出的就不乱码了
*/
// 将GBK格式的中文写入a.txt文件
File file = new File("src/a.txt");
FileOutputStream fileOutputStream = new FileOutputStream(file);
String str = "中";
byte[] by = str.getBytes("GBK"); // 将字符串改为GBK编码集
fileOutputStream.write(by);
fileOutputStream.close();
//从a.txt文件中读取中文
FileInputStream fileInputStream = new FileInputStream(file);
int len;
byte[] bys = new byte[4];
while ((len = fileInputStream.read(bys)) != -1) {
System.out.println(new String(bys, "GBK"));
}
fileInputStream.close();
StringBuffer
線程安全的可變字元序列。一個類似 String 的字串緩衝區,但不能修改。當然最重要的一點就是線程安全,我們可以從它的源碼中可以看出,對於一些操作(append,insert..)都是使用了線程控制塊來實現同步,適合與多線程下的使用,源程式碼如下:
public synchronized StringBuffer append(Object obj) { super.append(String.valueOf(obj)); return this; } public synchronized StringBuffer append(String str) { super.append(str); return this; } public synchronized StringBuffer delete(int start, int end) { super.delete(start, end); return this; } /** * @throws StringIndexOutOfBoundsException {@inheritDoc} * @since 1.2 */ public synchronized StringBuffer deleteCharAt(int index) { super.deleteCharAt(index); return this; }建構######new StringBuffer(StringBuilder str)###new StringBuffer( String str)############常用的方法############StringBuffer append(str)將指定類型的str追加到此字串的後面(String, char,char[],int,double,float,long,StringBuffer,StringBuilder)######StringBuffer insert(int offest, str) 將指定類型的str插入到此序列中,offest表示開始插入的位置的索引,類型有String,char,char[],int,double,float,long,StringBuffer,StringBuilder###
String delete(int fromIndex,int endIndex) 移除此序列中的字串並且傳回新的緩衝字串
StringBuffer reverse() 反轉字串
#String substring( int start) 傳回一個新的String,它包含此字元序列目前所包含的字元子序列。
String substring(int start, int end) 傳回一個新的 String,它包含此序列目前所包含的字元子序列。
StringBuffer deleteCharAt(int index) 移除此序列指定位置的 char。
int length() 長度
String toString() 傳回此序列中資料的字串表示形式。
StringBuilder
建議優先採用該類,因為在大多數實作中,它比 StringBuffer 要快。但是這個類別不是線程安全的,只適合單線程,如果使用多線程推薦使用StringBuffer,當然使用這個也行,不過需要自己實作同步
建構方法
new StringBuilder(String str)
常用方法
這個類別的常用方法和StringBuffer的一樣,這裡就不再一一列舉了,參考上面的即可使用
以上是Java字串進階的範例程式碼分享(收藏)的詳細內容。更多資訊請關注PHP中文網其他相關文章!