Loading... > java.lang.String:代表字符串。Java程序中所有的字符串文字(例如 “abc” )都可以被看作是实现此类的实例。底层是一个被final修饰的数组,是一个常量。 # 1、特点 1. 字符串不变:字符串的值在创建后不能被更改。 ```java has-numbering String s1 = "abc"; s1 += "d"; System.out.println(s1); // "abcd" // 内存中有"abc","abcd"两个对象,s1从指向"abc",改变指向,指向了"abcd"。 ``` 2. 因为String对象是不可变的,所以它们可以被共享。 ```java has-numbering String s1 = "abc"; String s2 = "abc"; // 内存中只有一个"abc"对象被创建,同时被s1和s2共享。 ``` 3. 字符串相当于char[]字符数组,底层是byte[]字节数组。 ```java has-numbering String str = "abc"; // 相当于 char data = {'a', 'b', 'c'}; String str = new String(data); ``` # 2、注意 1. 可以使用 `new` 创建String对象,也可以使用 `"字符串内容"` 创建字符串对象; 2. 字符串常量池:使用 `"字符串内容"` 创建的字符串对象在字符串常量池中; `new` 出来的String对象不在池中; 3. 对于对象来说, `==` 比较的是地址值, `equals` 比较的是内容。 # 3、构造方法 `public String()` :初始化新创建的 String对象,以使其表示空字符序列 `public String(char[] value)` :通过当前参数中的字符数组来构造新的String `public String(byte[] bytes)` :通过使用平台的默认字符集解码当前参数中的字节数组来构造新的String # 4、成员方法 ## 4.1、判断功能 `public boolean equals(Object anObject)` :将此字符串与指定对象进行比较 `public boolean equalsIgnoreCase(String anotherString)` :将此字符串与指定对象进行比较,忽略大小写 ```java has-numbering public static void main(String[] args) { // 创建字符串对象 String s1 = "hello world !"; String s2 = "hello world !"; String s3 = "Hello World !"; // 比较两个字符串的内容是否相同 System.out.println(s1.equals(s2)); // true System.out.println(s1.equals(s3)); // false // 比较两个字符串的内容是否相同,忽略大小写 System.out.println(s1.equalsIgnoreCase(s2)); // true System.out.println(s1.equalsIgnoreCase(s3)); // true } ``` ## 4.2、获取功能 `public int length()` :返回此字符串的长度 `public String contact(String str)` :将指定的字符串连接到该字符串的末尾 `public char charAt(int index)` :返回指定索引处的 char值 `public int indexOf(String str)` :返回指定子字符串第一次出现在该字符串内的索引,没有则返回-1 `public String subString(int beginIndex)` :返回一个子字符串,从beginIndex开始截取字符串到字符 串结尾 `public String subString(int beginIndex, int endIndex)` :返回一个子字符串,从beginIndex到 endIndex截取字符串。含beginIndex,不含endIndex ```java has-numbering public static void main(String[] args) { // 创建字符串对象 String s = "hello.world"; // 获取字符串长度 System.out.println(s.length()); // 11 // 将指定字符串连接到该字符串结尾 String s1 = s.concat(" !!!"); System.out.println(s1); // hello.world !!! // 获取指定字符串在该字符串中第一次出现的索引,没有则返回-1 System.out.println(s1.indexOf("world")); // 6 System.out.println(s1.indexOf("!")); // 12 System.out.println(s1.indexOf("?")); // -1 // 获取指定索引处的字符 System.out.println(s.charAt(5)); // . // 获取从指定索引处开始到该字符串结尾的字符串 System.out.println(s.substring(6)); // world // 获取从指定开始索引(包含)到指定索引结束(不包含)的字符串 System.out.println(s.substring(3, 5)); // lo } ``` ## 4.3、转换功能 `public char[] toCharArray()` :将此字符串转换为新的字符数组 `public byte[] getBytes()` ::使用平台的默认字符集将该 String编码转换为新的字节数组 `public String replace(CharSquence target, CharSquence replacement)` :将与target匹配的字符串使用replacement字符串替换 ```java has-numbering public static void main(String[] args) { // 创建字符串对象 String s = "0Aa.---"; // 将字符串转换为字符数组 char[] chars = s.toCharArray(); for (int i = 0; i < chars.length; i++) { System.out.println(chars[i]); } System.out.println("======================="); // 将字符串转换为字节数组 byte[] bytes = s.getBytes(); for (int i = 0; i < bytes.length; i++) { System.out.println(bytes[i]); } System.out.println("======================="); // 将 “---” 替换为 “***”,将“.”替换为“¥” String s1 = s.replace("---", "***"); String s2 = s.replace(".", "¥"); System.out.println(s); // 0Aa.--- System.out.println(s1); // 0Aa.*** System.out.println(s2); // 0Aa¥--- } ``` ## 4.4、分割功能 `public String[] split(String regex)` :将此字符串按照给定的regex(规则)拆分为字符串数组 ```java has-numbering public static void main(String[] args) { // 创建字符串对象 String s = "aaa.。AAA|bbb.。BBB|ccc.。CCC"; // 以“。”分割字符串 String[] strArr0 = s.split("。"); for (int i = 0; i < strArr0.length; i++) { System.out.println(strArr0[i]); } /* aaa. AAA|bbb. BBB|ccc. CCC */ System.out.println("=============="); // 以“|”分割字符串 String[] strArr1 = s.split("\\|"); for (int i = 0; i < strArr1.length; i++) { System.out.println(strArr1[i]); } /* aaa.。AAA bbb.。BBB ccc.。CCC */ System.out.println("=============="); // 以“.”分割字符串 String[] strArr2 = s.split("\\."); for (int i = 0; i < strArr2.length; i++) { System.out.println(strArr2[i]); } /* aaa 。AAA|bbb 。BBB|ccc 。CCC */ } ``` # 5、练习 ## 5.1、拼接字符串 定义一个方法,把数组{1,2,3}按照指定个格式拼接成一个字符串。格式参照如下:[word1#word2#word3]。 ```java has-numbering public static void main(String[] args) { // 定义数组 int[] arr = {1, 2, 3}; // 调用方法 String s = arrToStr(arr); System.out.println(s); } /** * 将数组转换为字符串,用“#”分隔 * @param arr 参数数组 * @return 返回字符串 */ private static String arrToStr(int[] arr) { // 定义字符串 String s = "["; // 遍历数组 for (int i = 0; i < arr.length; i++) { if (i != arr.length - 1) { s = s.concat(arr[i] + "#"); } else { s = s.concat(arr[i] + "]"); } } return s; } ``` ## 5.2、统计字符个数 键盘录入一个字符,统计字符串中大小写字母及数字字符个数 ```java has-numbering public static void main(String[] args) { // 键盘录入一个字符串 Scanner sc = new Scanner(System.in); System.out.println("请输入一个字符串"); String s = sc.nextLine(); // 定义三个统计变量 int bigNum = 0; // 大写字母个数 int smallNum = 0; // 小写字母个数 int numberNUm = 0; // 数字字符个数 // 遍历字符串 for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); // 用字符进行比较 if (c >= '0' && c <= '9') { numberNUm++; }else if (c >= 'a' && c <= 'z') { smallNum++; }else if (c >= 'A' && c <= 'Z') { bigNum++; }else { System.out.println("该字符 " + c + " 非法!"); } } // 输出结果 System.out.println("大写:" + bigNum); System.out.println("小写:" + smallNum); System.out.println("数字:" + numberNUm); } ``` > 感谢小伙伴们的关注! > 你的点赞、评论、关注、收藏是对博主的最大鼓励! > 持续更新JavaSE学习笔记!欢迎订阅专栏! 最后修改:2021 年 10 月 06 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏