目录
创建字符串
- 引用字符串常量
- String a; a = "student";
- 使用相同的字符串常量赋值给不同的变量,他们的地址是一样的(a==b),程序会在栈中查找存不存在常量,存在直接将地址赋给新的变量而不是重新在堆中创建对象
- 利用构造方法
- String a = new String("student")
- String b = new String(a)
- 利用字符数组实例化
- String a = new String(char a[])
- String a = new String(char a[], int offset, int length)
- 利用字节数组实例化
- String a = new String(byte a[])
连接字符串
- 连接多个字符串
- +
- += 变量名字很长时,可读性高
- 连接其他类型
- 只有+运算符有一个操作数是字符串,编译器就会将另一个操作数转换为字符串(自动调用toString()方法)
获取字符串信息
- 获取字符串长度
- str.length()
- str.lastIndexOf(""); 空字符串在字符串里的索引等于字符串的长度
- 字符串查找
- str.indexOf(String s); 返回s在指定字符串中首次出现的索引位置,没有检索到返回-1
- str.indexOf(String s, int fromIndex);
- str.lastIndexOf(String s); 返回s搜索的字符串最后一次出现的位置,没有检索到返回-1
- str.lastIndexOf(String s, int fromIndex);
- 获取指定索引位置的字符
- str.charAt(int index)
字符串操作
- 获取子字符串
- str.substring(int beginIndex); 返回从索引位置到结尾的子串
- str.substring(int beginIndex, int endIndex); 返回从索引开始到结束的子串,长度为endIndex - beginIndex,不包括最后一个索引所指的字符
- 去除字符串前后空格
- str.trim();
- 字符串替换
- str.replace(char oldChar, char newChar); 替换字符或字符串,没有出现返回原字符串
- str.replaceAll("\\s", ""); 去掉所有空格,前一个参数是正则表达式,后一个参数是替换的内容
- 判断字符串的开始与结尾
- str.startsWith(String prefix); 返回值为boolean类型
- str.endsWith(String suffix);
- 判断字符串相等
- str.equals(String otherstr); ,返回boolean值
- str.equalsIgnoreCase(String otherstr); 忽略大小写
- 按字典顺序比较字符串
- str.compareTo(String otherstr); 逐个比较字符串中的字符,如果str在otherstr之后,在之前返回一个负整数,在之后返回一个正整数,返回值为之前或之后的第几个位置。相等返回0
- str.compareToIgnoreCase(String otherstr);
- 字母大小写转换
- str.toLowerCase();
- str.toUpperCase(); 数字或非字符不受影响
- 字符串分割
- str.split(String sign); sign是分隔符,使用“|”定义多个分隔符,也可以使用正则表达式
- str.split(String sign, int limit); limit限定分割次数,次数小于等于0、大于最大分割数全分割
- split会匹配正则表达式,.表示匹配任意字符,所以需要使用\转义,而\本身也需要转义所以是\\.
格式化字符串
String类的静态方法formate()用于创建格式化的字符串。
- 日期和时间字符串格式化
- 需要导入import java.util.Date
- Date date = new Date(); String s = String.formate(String form, date); s是格式化后的字符串
- 常规类型格式化
使用正则表达式
- 正则表达式元字符,这个元字符表示特定的字符集合
- 使用方括号[]括起来表示一个元字符,该元字符可以代表元字符中的任何一个字符[abc]4代表a4、b4、c4
- [^abc] 表示除abc之外的字符,^表示相反
- [a-z] 表示a-z中任何一个字母,-表示范围
- [a-e[g-z]] []中加[]表示并运算
- [a-o&&[def]] &&表示交运算
- [a-d&&[^bc]] &&结合^表示差运算
- |表示或、&&表示交、[]表示其中的任意一个、^表示相反
- 限定修饰符限定元字符出现次数
- str.matchs(String regex); 返回boolean
字符串生成器
使用String创建的字符串其长度是固定的,使用+进行连接多个字符串时,会产生一个新的String实例,在内存中创建新的字符串对象,如果重复的对字符串进行修改,会极大的增加系统开销。JDK5新增了可变字符序列(String-Builder)类,大大的提高了频繁增加字符串的效率。
- StringBuffer与StringBuider比较:
- 提供兼容的API,但是StringBuider不保证线程同步,缺点是只能在单线程中使用,优点是不会给线程加锁
- StringBuffer、StringBuider、String可以相互转换
- String转换到StringBuffer或StringBuider使用构造方法new StringBuider(String)或new StringBuider(String)
- StringBuffer、StringBuider转换到String使用toString()方法
- StringBuffer与StringBuider方法相互转换先使用toString()方法转换为String再使用构造方法
- StringBuilder builder = new StringBuider();
- StringBuilder builder = new StringBuider("123");
- StringBuilder builder = new StringBuider(32); 初始容量为32个字符
- append(content); 添加内容,返回StringBuider对象,地址
- insert(int offset, arg); 插入内容,返回StringBuilder对象
- delete(int start, in end); 删除子串,返回StringBuider对象
- setCharAt(int index, char ch); 无返回值
- reverse(); 反序输出;
- toString(); 返回String对象
- 与String相似的方法
- int lengt = builder.length(); 返回字符串长度
- char chr = builder.charAt(int index); 获取指定索引的字符串
- int index = builder.indexOf(String str); 获取指定字符串的索引
- String substr = builder.substring(int beginIndex, int endIndex); 获取子串
- StringBuider tmp = builder.replace(int beginIndex, int endIndex, String str); 替换指定字符序列(与String不同)
- 其他类方法查询java.lang.StringBuilder的API说明
- StringBuffer buffer = new StringBuffer(); 同StringBuider
package ex5_String;
public class ex5_28_Jerque {
public static void main(String[] args) {
String str = "";
long starTime = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {
str += i;
}
long endTime = System.currentTimeMillis();
System.out.println("time: " + (endTime - starTime));
StringBuilder builder = new StringBuilder("");
starTime = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {
builder.append(i);
}
endTime = System.currentTimeMillis();
System.out.println("time: " + (endTime - starTime));
}
}
练习
- 写手机号的正则表达式
- 使用字符串生成器追加字符
package ex5_String;
public class ex5_practice_3 {
public static void main(String[] args) {
String text = "12345678912";
String regex = "1\\d{10}";
System.out.println(text + " is " + text.matches(regex) + " phone number");
StringBuilder builder = new StringBuilder("");
for (int i = 1; i<=10; i++) {
builder.append(i);
}
System.out.println(builder.toString());
}
}