String类 字符串(引用类型) 修改字符串 是重新创建 赋值地址
构造方法
public class StringDemo2 {
public static void main(String[] args) {
String s1 = "hello";
String s2 = "hello"; 与s2指向同一地址 存储在堆的常量池中
String s3 = new String("hello"); 创建对象 存储了s1地址
System.out.println(s1==s2); //true 地址相等
System.out.println(s1==s3); //false
System.out.println(s1.equals(s3));//true 内容相等 重写了Object的
byte[] bytes={65,66,67,68}; 正数:字母 负数:汉字(两个字节)
String str=new String(bytes); // byte数组 转 字符串
String str=new String(bytes,1,2); //(数组,始值 个数)
byte[] bytes = str.getBytes(); // 字符串 转 byte数组
char[] ch={'中','a','2'};
String str=new String(ch); // 字符数组 转 字符串
String str=new String(ch,0,1); // 字符数组 转 字符串
char[] chs = str.toCharArray(); //字符串 转 字符数组
}
}
方法
str.toString() 获取字符串对象的内容 输出时 自动调用
str.isEmpty() 判断字符串是不是空串
str.length() 返回字符串长度
str.charAt(0) 返回索引处字符
str.equals(str2); 判断字符串 与 指定字符串 内容是否相同
str.equalsIgnoreCase(str3); 判断字符串内容是否相同 忽略大小写
str.substring(1) 截取开始索引 到最后 的字符串
str.substring(2, 4) 截取开始索引 到终止索引(不包括) 的字符串
str.indexOf("bcd") 返回第一次出现该字符串的索引,没有返回-1
str.contains("bcd") 判断是否包含指定字符串true/false
str.startsWith("Demo") 判断是否以给定字符串开头
str.endsWith("java") 判断是否以给定字符串结尾
str.toLowerCase() 把字符串转换为小写字符串
str.toUpperCase() 把字符串转换为大写字符串
str.trim() 去掉字符串两端空格
str.replace(oldChar, newChar) 将替换字符串中的老字符,为新字符
str.replace(oldstr, newstr) 将字符串中的老字符串,替换为新字符串
String[] strArray = str.split(",") 按照指定符号分割字符串
StringBuilder 字符串缓冲区(高效) StringBuffer() 用法相同
public class StringBuilderDemo {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder(); //构造方法 初始为空串
StringBuilder sb = new StringBuilder("world");//构造方法 str 转sb
String str = sb.toString(); //str 转sb 输出时 自动调用
StringBuilder sb2 = sb.append("hello");//添加数据(任意类型)
System.out.println(sb == sb2); //true 地址相同
sb.delete(1, 4); //删除 [1,4)字符
sb.deleteCharAt(1); //删除字符
sb.insert(2, "it"); //在指定位置插入
sb.replace(1, 4, "java");//替换[1,4)的字符串为"java"
sb.reverse();反转
sb.length() //返回长度(字符数)
sb.charAt(0) 返回索引处的字符
sb.indexOf("java",5) 查找第一次出现字符串的索引 从指定索引处
String str = sb.substring(0,1); 截取 [0,1) 返回字符串
String str = sb.substring(1); 截取[1,最后] 返回字符串
sb.append("hello").append(true).append(100); //链式调用
}
}
正则表达式(简写为regex Pattern类 是字符串)
匹配规则
字符: 字符类:
X 字符 [abc] a或b 或 c
\ 转义 [^abc] 除了 a、b 或 c以外的任何字符
制表符 [a-zA-Z] a 到 z 或 A 到 Z
换行符 [0-9] 0到9数字
回车符 [a-zA-Z_0-9] 字母或数字或下划线
预定义字符类:
. 点代表的是任何字符 \. 匹配 点
d 0到9数字 D取反 \d
w 字母或数字或下划线 W取反 \w
数量词: 边界匹配器:
X? X出现0~1次 ^ 行的开头
X* X出现0~∞次 $ 行的结尾
X+ X出现1~∞次 单词边界
X{n} X出现恰好 n 次
X{n,} X出现至少 n 次
X{n,m} X出现 n ~ m 次
regex = "(.)\1";
点表示任意字符,\1取第一个括号匹配的内容,加号匹配1次以上
某个字符重复两次或两次以上
正则表达式的常用方法
String str = "18369657617";
String regex = "1[34578][0-9]{9}";
boolean flag2 = str.matches(regex); 判断字符串是否匹配
String s = "18-22-40-65";
String regex = "-";
String[] result = s.split(regex); 用分隔符 分割字符串 为 字符串数组
String s = "Hello12345World6789012";
String regex = "[0-9]";
String result = s.replaceAll(regex, "*");字符串中符合规则的替换为 新字符
字符串 数字 转换
public class Demo03 {
public static void main(String[] args) {
// 字符串转成基本类型Xxx.parseXxx(String s); xxx:基本数据类型
String str="12";
System.out.println(str+1); // 121
int s1=Integer.parseInt(str); // str内容必须是int格式
System.out.println(s1+1); // 13
String str2="2.3";
double s2=Double.parseDouble(str2);
System.out.println(s2+1); // 3.3
//基本类型 转 字符串
String s1=12+""; // 方法1
String s3=String.valueOf(2.3); // 方法2
System.out.println(10+s3); // 102.3
String s4=Integer.toString(12); // 方法3 有参数 不是重写obj
System.out.println(s4+1); // 13
}
}