网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
/**
* @Description 字符串的构造方法
*/
public class StringMethod1 {
public static void main(String[] args) {
// 1. 无参构造, 实例化一个空的字符串对象。 所谓的空字符串,其实是 "", 并不是null。
String s1 = new String(); // String s1 = "";
System.out.println(s1);
// 2. 通过一个字符串, 实例化另外一个字符串。
String s2 = new String("hello");
System.out.println(s2);
char[] arr1 = { 'h', 'e', 'l', 'l', 'o' };
// 3. 通过一个字符数组, 实例化一个字符串。将字符数组中的所有的字符拼接到一起。
String s3 = new String(arr1);
System.out.println(s3);
// 4. 通过一个字符数组, 实例化一个字符串。 将字符数组中的指定范围的字符拼接到一起。
String s4 = new String(arr1, 2, 3);
System.out.println(s4);
byte[] arr2 = { 97, 98, 99, 100, 101, 102, 103, 104 };
// 5. 将一个字节数组中的每一个字节,转成对应的字符,再拼接到一起,组成一个字符串。
String s5 = new String(arr2);
System.out.println(s5);
// 6. 将一个字节数组中的offset位开始,取length个字节,将每一个字节,转成对应的字符,再拼接到一起,组成一个字符串。
String s6 = new String(arr2, 2, 4);
System.out.println(s6);
}
}
13.2.2. 字符串的非静态方法
13.2.2.1. 前言
因为字符串, 是常量。 任何的修改字符串的操作, 都不会对所修改的字符串造成任何的影响。 所有的对字符串的修改操作, 其实都是实例化了新的字符串对象。 在这个新的字符串中, 存储了修改之后的结果。 并将这个新的字符串以返回值的形式返回。 所以, 如果需要得到对一个字符串修改之后的结果, 需要接收方法的返回值。
13.2.2.2. 常用的非静态方法
13.2.2.3. 示例代码
import java.util.Arrays;
/**
* @Description 字符串常用的非静态方法
*/
public class StringMethod2 {
public static void main(String[] args) {
// 1. 字符串的拼接,效率比加号拼接高
String ret1 = "hello".concat("world");
System.out.println(ret1); // helloworld
// 2. 字符串截取
String ret2 = "hello world".substring(3);
System.out.println(ret2); // lo world
String ret3 = "hello world".substring(3, 8);
System.out.println(ret3); // lo wo
// *. 字符序列截取
CharSequence charSequence = "hello world".subSequence(3, 8);
System.out.println(charSequence);
// 3. 用新的字符替换原字符串中所有的旧的字符
String ret4 = "hello world".replace('l', 'L');
System.out.println(ret4); // heLLo worLd
// 4. 用新的字符序列替换原字符串中所有的旧的字符序列
String ret5 = "hello world".replace("ll", "~");
System.out.println(ret5); // he~o world
// 5. 转成字符数组
char[] ret6 = "hello world".toCharArray();
System.out.println(Arrays.toString(ret6)); // [h, e, l, l, o, , w, o, r, l, d]
// 6. 转成字节数组
byte[] ret7 = "hello world".getBytes();
System.out.println(Arrays.toString(ret7)); // [104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100]
// 7. 获取某一个字符在一个字符串中第一次出现的下标。
int ret8 = "hello world".indexOf('L');
System.out.println(ret8); // 2
// 8. 获取某一个字符在一个字符串中从fromIndex位开始往后,第一次出现的下标。
int ret9 = "hello world".indexOf('l', 4);
System.out.println(ret9); // 9
// 9. 获取某一个字符在一个字符串中最后一次出现的下标。
int ret10 = "hello world".lastIndexOf('o');
System.out.println(ret10); // 7
// 10. 获取某一个字符在一个字符串中,从fromIndex位开始往前,最后一次出现的下标
int ret11 = "hello world".lastIndexOf('o', 5);
System.out.println(ret11); // 4
// 11. 字符串大小写字母转变
System.out.println("hello WORLD".toUpperCase());
System.out.println("hello WORLD".toLowerCase());
// 12. 判断一个字符串中, 是否包含另外一个字符串。
System.out.println("hello world".contains("loo"));
// 需求:判断一个字符串中是否包含某一个字符
// 答案:或者这个字符在字符串中出现的下标,如果不是-1,说明包含。
// 13. 判断一个字符串, 是否是以指定的字符串作为开头。
System.out.println("哈利波特与魔法石.mp4".startsWith("哈利波特"));
System.out.println("哈利波特与魔法石.mp4".endsWith(".mp4"));
// 14. 去除一个字符串首尾的空格
System.out.println(" hello world ".trim());
// 15. 判断两个字符串的内容是否相同
System.out.println("hello world".equals("HELLO WORLD"));
System.out.println("hello world".equalsIgnoreCase("HELLO WORLD")); // true
// 16. 比较两个字符串的大小
// > 0: 前面的字符串 > 参数字符串
// == 0: 两个字符串大小相等
// < 0: 前面的字符串 < 参数字符串
// 比较逻辑:
// 依次比较每一位的字符的大小。
// 如果某一次的字符比较可以分出大小,本次的比较结果将作为整体的字符串的比较结果。
int result = "hello world".compareTo("hh");
System.out.println(result);
}
}
13.2.3. 字符串的静态方法
13.2.3.1. 常用的静态方法
13.2.3.2. 示例代码
/**
* @Description
*/
public class StringMethod3 {
public static void main(String[] args) {
// 将若干个字符串拼接到一起,在拼接的时候,元素与元素之间以指定的分隔符进行分隔
String str1 = String.join(", ", "lily", "lucy", "uncle wang", "polly");
System.out.println(str1);
float score = 100;
String name ="xiaoming";
int age = 19;
// 大家好,我叫xiaoming,今年19岁了,本次考试考了100分。
/**
* 常见占位符:
* %s : 替代字符串 -> %ns: 凑够n位字符串,如果不够,补空格
* %d : 整型数字占位符 -> %nd: 凑够n位,如果不够补空格。
* %f : 浮点型数字占位符 -> %.nf: 保留小数点后面指定位的数字
* %c : 字符型占位符
*/
String str2 = String.format("大家好,我叫%11s,今年%03d岁了,本次考试考了%.6f分。", name, age, score);
System.out.println(str2);
}
}
13.3. StringBuffer和StringBuilder类
13.3.1. 概念
都是用来操作字符串的类。
字符串都是常量, 所有的操作字符串的方法, 都不能直接修改字符串本身。 如果我们需要得到修改之后的结果, 需要接收返回值。
StringBuffer和StringBuilder不是字符串类, 是用来操作字符串的类。 在类中维护了一个字符串的属性, 这些字符串操作类中的方法, 可以直接修改这个属性的值。 对于使用方来说, 可以不去通过返回值获取操作的结果。
在StringBuffer或者StringBuilder类中, 维护了一个字符数组。 这些类中所有的操作方法, 都是对这个字符数组进行的操作。
13.3.2. 常用方法
13.3.3. 示例代码
/**
* @Description
*/
public class Test {
public static void main(String[] args) {
// 1. 构造方法
StringBuilder sb = new StringBuilder("hello world");
// 2. 增: 在一个字符串后面拼接其他的字符串
sb.append('!');
// 3. 增: 在指定的下标位插入一条数据
sb.insert(3, "AAAAA");
// 4. 删: 删除字符串中的 [start, end) 范围内的数据
sb.delete(3, 5);
// 5. 删: 删除指定位的字符
sb.deleteCharAt(6);
// 6. 截取一部分的字符串,这个操作不会修改到自己,如果希望得到截取的部分,需要接收返回值。
String sub = sb.substring(4, 6);
// 7. 替换,将字符串中 [start, end) 范围内的数据替换成指定的字符串
sb.replace(3, 6, "l");
// 8. 修改指定下标位的字符
sb.setCharAt(0, 'H');
// 9. 将字符串前后翻转
sb.reverse();
System.out.println(sb);
}
}
13.3.4. 区别
StringBuffer和StringBuilder从功能上来讲, 是一模一样的。 但是他们两者还是有区别的:
- StringBuffer是线程安全的。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
中…(img-D1L8hMEn-1715659753478)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!