最常用的對字串運算的類別有三個,分別是String,StringBuilder,StringBuffer,下面將會詳細的說說這三個類別......
String類別代表字串,這個是最基本的對字串的類,這個也是使用比較多的類,這裡就不再詳細介紹了
new String(String str)
new String(StringBuilder str)
#new String(StringBuffer str)
#new String(byte[] bys,String charsetName)
透過使用指定的字元集解碼指定的byte 子數組,建構一個新的String。
char[] toCharArray()
#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)
根據符合給定的正規表示式來拆分此字串。
String將此
- charset
byte[] getBytes(Charset charset)
使用給定的
######上面的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()
傳回此序列中數據的字串表示形式。
建議優先採用該類,因為在大多數實作中,它比
StringBuffer
要快。但是這個類別不是線程安全的,只適合單線程,如果使用多線程推薦使用StringBuffer
,當然使用這個也行,不過需要自己實現同步
new StringBuilder(String str)
#這個類別的常用方法和
StringBuffer
的一樣,這裡就不再一一列舉了,參考上面的即可使用
以上是Java字串進階的詳細內容。更多資訊請關注PHP中文網其他相關文章!