一、String
字符串创建
public class StringBuild {
public static void main(String[] args) {
// 1.直接创建
String str1 = "abc";
System.out.println(str1);
// 2.新建对象创建
String str2 = new String("abc");
System.out.println(str2);
// 3.通过字符数组创建
char[] crr = new char[]{'a', 'b', 'c'};
String str3 = new String(crr);
System.out.println(str3);
// 4.通过字符数组创建
byte[] brr = new byte[]{97 ,98 ,99};
String str4 = new String(brr);
System.out.println(str4);
}
}
字符串查找
public class StringFind {
public static void main(String[] args) { // 字符串查找:str.charAt str.indexOf str.lastIndexOf
String str = "hello meat ooo";
// 1 查找指定索引的字符
System.out.println(str.charAt(4));
System.out.println("============================================================");
// 2.1 查找第一次出现指定字符的下标
System.out.println(str.indexOf('o'));
// 2.2 从指定索引开始,查找出现指定字符的下标
System.out.println(str.indexOf('a', 6));
// 2.3 查找第一次出现指定字符串的第一个元素的下标位置
System.out.println(str.indexOf("ooo"));
// 2.4从指定索引开始,查找出现指定字符串的第一个元素的下标位置
System.out.println(str.indexOf("ooo", 10));
System.out.println("============================================================");
// 3.1 从后往前找第一次出现指定字符的下标
System.out.println(str.lastIndexOf('t'));
// 3.2 从指定索引开始,从后往前找第一次出现指定字符的下标
System.out.println(str.lastIndexOf('t', 10));
// 3.3 从后往前找第一次出现指定字符串的下标
System.out.println(str.lastIndexOf("ooo"));
// 3.4 从指定索引开始,从后往前找第一次出现指定字符串的下标
System.out.println(str.lastIndexOf("ooo", 10));
}
}
字符串比较
public class StringMethod {
public static void main(String[] args) {
String str1 = new String("Hello");
String str2 = new String("Hello");
String str3 = new String("World");
String str4 = str1;
// 比较引用地址: ==
System.out.println(str1 == str2);
System.out.println(str1 == str4);
System.out.println("============================================================");
// 比较字符串内容,返回布尔类型:str1.equals(str2)
System.out.println(str1.equals(str2));
System.out.println(str1.equals(str4));
System.out.println("============================================================");
// 比较内容,返回整型: str1.compareTo(str2)
System.out.println(str1.compareTo(str2));
System.out.println(str1.compareTo(str3));
System.out.println("============================================================");
// 比较内容,忽略大小写,返回整型:str1.compareToIgnoreCase(str2)
System.out.println(str1.compareToIgnoreCase(str2));
System.out.println(str1.compareToIgnoreCase(str3));
System.out.println("============================================================");
}
}
字符串替换
public class StringReplace {
public static void main(String[] args) {
String str = "Hello meat";
// 替换全部字符:str.replaceAll
System.out.println(str.replaceAll("l", "p"));
// 替换首个字符:str.replaceFirst
System.out.println(str.replaceFirst("l", "p"));
}
}
字符串拆分
public class StringSpilt {
public static void main(String[] args) {
String str = "Hello World Hello meat";
// 将字符串全部以空格拆分:str.split("..."),用字符串数组接受
String[] srr1 = str.split(" ");
for (String s : srr1) {
System.out.println(s);
}
System.out.println("============================================================");
// 将字符串以空格拆分 2 次
String[] srr2 = str.split(" ", 2);
for (String s : srr2) {
System.out.println(s);
}
System.out.println("============================================================");
// . | * + , ==> 都需要\\转义才能拆分
String str2 = "name=ZhangSan&age=18";
String[] srr3 = str2.split("=|&");
for (String s : srr3) {
System.out.println(s);
}
}
}
字符串的截取和去除空格
public class SubStringAndTrim {
public static void main(String[] args) { // 字符串的截取和去除空格
String str1 = "hello meat";
// 从指定索引截取到结尾:str.substring(index)
System.out.println(str1.substring(5));
// 截取指定索引范围内内容:str.substring(index, index)
System.out.println(str1.substring(5, 8));
System.out.println("============================================================");
String str2 = " hello world";
//去除两边的空格:str.trim()
System.out.println(str2);
System.out.println(str2.trim());
}
}
intern方法
public class StringIntern {
public static void main(String[] args) {
char[] ch = new char[]{'a', 'b', 'c'};
String str1 = new String(ch);
str1.intern(); // 调用此方法后,将str1对象的引用放入字符串常量池中
String str2 = "abc"; // “abc” 在字符串常量池中已经存在,str2创建时之间使用"abc"的引用
System.out.println(str1 == str2); // 返回true,若没有调用上述方法则返回false
}
}
字符串转换
public class StringTransfer {
public static void main(String[] args) {
// 转换为字符串形式
String s1 = String.valueOf(1); // 整型转换为字符串:String.valueOf(...)
String s2 = String.valueOf(1.1); // 浮点转换为字符串:String.valueOf(...)
String s3 = String.valueOf(true); // 布尔转换为字符串:String.valueOf(...)
String s4 = String.valueOf(new Student("LiHua", 18)); // 打印类的信息
System.out.println(s1 + " " + s2 + " " + s3 + " " + s4);
System.out.println("============================================================");
// 字符串转为数字:封装类型.parse类型("...") 以此类推
int a = Integer.parseInt("1"); // 字符串转为整型
double b = Double.parseDouble("1.1"); // 字符串转为浮点
System.out.println(a);
System.out.println(b);
System.out.println("============================================================");
// 大小写转换:str.toUpperCase() str.toLowerCase()
String str1 = "Hello";
String str2 = "HELLO";
System.out.println(str1.toUpperCase()); // 小写转大写
System.out.println(str2.toLowerCase()); // 大写转小写
System.out.println("============================================================");
// 字符串转为字符数组:str.toCharArray()
String str3 = "Hello";
char[] ch = str3.toCharArray();
for (char c : ch) {
System.out.print(c + " ");
}
System.out.println();
System.out.println("============================================================");
// 字符数组转为字符串:String str = new String(定义好的字符数组变量)
String str4 = new String(ch);
System.out.println(str4);
System.out.println("============================================================");
// 格式化输出:String.format(" ", ...)
String str5 = String.format("%d,%d,%d", 2020,1,1);
System.out.println(str5);
}
}
重写toString方法
class Student {
String name;
int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
二、StringBuffer和StringBuilder
由于String的内容无法修改,StringBuffer和StringBuilder解决了这一问题,可用于频繁修改字符串的操作,两者的方法区别不大。其中StringBuffer有线程安全,而StringBuilder没有。
注:
- StringBuffer和StringBuilder不能和String直接转换。
- String转换StringBuffer和StringBuilder:调用构造方法或
append()方法。 - StringBuffer和StringBuilder转换String:调用
toString()方法。 - StringBuffer和StringBuilder的方法声明有区别。
public static StringBuilder append(String s) {
StringBuilder sb = new StringBuilder();
sb.append(s);
return sb;
}
public static synchronized StringBuffer append(String s) {
StringBuffer sb = new StringBuffer();
sb.append(s);
return sb;
}
StringBuilder常用方法
public static void main(String[] args) {
StringBuilder sb1 = new StringBuilder("hello");
StringBuilder sb2 = sb1;
sb1.append(" "); // 字符串尾插
sb1.append("meat");
System.out.println(sb1 == sb2); // true
System.out.println(sb1.charAt(0)); // 获取下标为0的字符
System.out.println(sb1.length()); // 获取字符串长度
System.out.println(sb1.capacity()); // 获取字符串底层数组长度
sb1.setCharAt(0, 'H'); // 修改下标为0的字符为'H'
sb1.insert(0, "Wow") // 在下标为0的地方插入字符串
System.out.println(sb1.indexOf("hello")); // 输出第一次出现指定字符的位置
System.out.println(sb1.lastIndexOf("hello")); // 输出最后一次出现指定字符的位置
sb1.deleteCharAt(0); // 删除指定下标的字符
sb1.deletet(0, 2); // 删除[0, 2)范围内的字符
String str1 = sb1.substring(0, 2); // 截取[0, 2)范围内的字符并以String返回
String str2 = sb1.toString(); // 以String返回
sb1.reverse(); // 翻转字符串
}

参与讨论
(Participate in the discussion)
参与讨论