一、String
String一旦声明,长度和内容都不可改变。适合少量数据的简单操作。
声明初始化:
String str = "Hello ";
String str = new String("Hello ");
连接:
String str = "Hello ";
str += "World!";
string1.concat(string2)
获取长度:
str.length()
是否包含:
str.contains("Hello")
取每个字符:
str.charAt(0)
替换:
str1.replace("a", "b")
Str.replaceAll("(.*)a(.*)", "b" ) //支持正则
分割:
str.split("_")
子串:
Str.substring(4, 10)
转字符数组:
Str.toCharArray()
删除头尾空白:
Str.trim()
指定字符第一次出现位置:
string.indexOf("a",3)
字符串hash值:
Str.hashCode()
以某某开头或结尾:
Str.startsWith("www")
Str.endsWith( "com" )
类型转换:
// 数字转换为字符串
int a = 332;
String str = String.valueOf(a);
String str = Interger.toString(a);
String str = a + "";
//字符串转换为数字
String str = "abcd";
int a = Integer.parseInt(str,10); #10表示字符串是几进制形式
int b = Integer.valueOf(str);
//字符串转化为字符数组
String str = " acbd";
char[] c = str.toCharArray();
String[] arr = str.split("");
for(int i =0;i<arr.length;i++){ //String数组,不过arr[0]为空
System.out.println(arr[i]); //空 1 2 3 a b c
}
//字符数组转化为字符串
char[] c = {'a','b','c'};
String str = String.valueOf(c);
String string =String.copyValueOf(arr);
//字符串的逆
String s="123abc";
System.out.println(new StringBuilder(s).reverse().toString());
正则匹配
import java.util.regex.*;
class Untitled {
public static void main(String[] args) {
String str = "L[4(((d)B]A";
Pattern p = Pattern.compile("\\(\\(\\(|\\[");
Matcher m = p.matcher(str);
while(m.find()){
System.out.println(m.start());
System.out.println(m.end());
System.out.println(m.group());
}
}
}
1
2
[
3
6
(((
二、StringBuffer
由于String的内容不可变性,导致操作字符串效率低,且浪费空间。而StringBuffer不同,在处理字符串时一般不会重新生成。StringBuffer 默认分配16字节长度的缓冲区,当字符串超过该大小时,会自动增加缓冲区长度,而不是生成新的对象。适合大量数据的多线程操作。
声明初始化:
StringBuffer str = =new StringBuffer(32); //分配32字节长度
StringBuffer str = new StringBuffer("Hello "); //放置字符串的同时,预留16字节长度
追加:
str.append("Word")
删除:
str.deleteCharAt(0)
str.delete(1, 4) //[1,4)
插入:
str.insert(0, "aaa")
修改单个字符:
str.setCharAt(3, 'b')
设置字符序列长度:
str.setLength
转换成string:
str.toString()
反转:
str.reverse()
三、StringBuilder
String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。
StringBuilder类和StringBuffer类功能相似,主要区别在于StringBuffer类的方法是多线程安全的,而StringBuilder不是线程安全的,相比而言,StringBuilder类会略微快一点。适合大量数据的单线程操作。