String学习总结
- 定义与初始化
- 字面量定义:可以直接使用双引号来定义一个字符串,例如
String str = "Hello";
。这种方式创建的字符串对象存储在字符串常量池中。如果多个字符串字面量相同,它们会指向字符串常量池中的同一个对象,以节省内存。 - 使用
new
关键字定义:也可以通过new
关键字来创建字符串对象,如String str2 = new String("World");
。这种方式会在堆内存中创建一个新的字符串对象,即使字符串内容与常量池中已有的相同。
- 字面量定义:可以直接使用双引号来定义一个字符串,例如
- 不可变性
- 含义:String对象一旦被创建,它的值就不能被改变。例如,当对一个已有字符串进行操作(如拼接、替换等)时,实际上是创建了一个新的字符串对象。
- 示例:
String str = "abc"; str = str + "def"; // 这里并不是修改了原来的"abc"对象,而是创建了一个新的字符串对象"abcdef"
- 常用方法
- 获取长度:使用
length()
方法可以获取字符串的长度,例如String str = "Java"; int len = str.length();
,这里len
的值为4。 - 字符获取与遍历:
- 可以使用
charAt(int index)
方法获取指定索引位置的字符。例如String str = "Hello"; char c = str.charAt(1);
,这里c
的值为'e'。 - 也可以使用循环来遍历字符串中的字符,如:
String str = "World"; for (int i = 0; i < str.length(); i++) { char ch = str.charAt(i); System.out.println(ch); }
- 可以使用
- 字符串拼接:
- 使用
+
运算符可以拼接字符串,例如String str1 = "Hello"; String str2 = "World"; String result = str1 + " " + str2;
,这里result
的值为"Hello World"
。 - 还可以使用
concat()
方法进行拼接,如String str3 = "Java"; String str4 = str3.concat(" is great");
,str4
的值为"Java is great"
。
- 使用
- 字符串比较:
equals()
方法用于比较两个字符串的内容是否相同。例如String str1 = "abc"; String str2 = "abc"; boolean isEqual = str1.equals(str2);
,这里isEqual
的值为true
。需要注意的是,==
运算符比较的是两个对象的引用是否相同,对于字符串字面量,如果它们在常量池中相同,则==
也可能返回true
,但对于通过new
创建的字符串对象,即使内容相同,==
通常也会返回false
。equalsIgnoreCase()
方法用于忽略大小写比较字符串内容,例如String str3 = "ABC"; String str4 = "abc"; boolean isEqualIgnoreCase = str3.equalsIgnoreCase(str4);
,这里isEqualIgnoreCase
的值为true
。
- 子串提取:
- 使用
substring(int beginIndex)
方法可以从指定索引位置开始提取子串,直到字符串末尾。例如String str = "Java is cool"; String subStr1 = str.substring(5);
,subStr1
的值为"is cool"
。 substring(int beginIndex, int endIndex)
方法可以提取从beginIndex
(包含)到endIndex
(不包含)之间的子串。例如String subStr2 = str.substring(0, 4);
,subStr2
的值为"Java"
。
- 使用
- 字符串替换:
replace(char oldChar, char newChar)
方法可以将字符串中的指定字符替换为新的字符。例如String str = "apple"; String newStr = str.replace('p', 'x');
,newStr
的值为"axxle"
。replaceAll(String regex, String replacement)
方法可以使用正则表达式来替换字符串中的内容。例如String str2 = "abc123def"; String newStr2 = str2.replaceAll("\\d", "X");
,newStr2
的值为"abcXXXdef"
。
- 字符串分割:
- 使用
split(String regex)
方法可以根据指定的正则表达式来分割字符串。例如String str = "a,b,c"; String[] parts = str.split(",");
,这里parts
数组包含{"a", "b", "c"}
三个元素。
- 使用
- 获取长度:使用
- 字符串与其他数据类型的转换
-
转换为其他数据类型:
- 转换为整数:可以使用
Integer.parseInt(String s)
方法将字符串转换为整数,例如String numStr = "123"; int num = Integer.parseInt(numStr);
。需要注意的是,如果字符串内容不是合法的整数格式,会抛出NumberFormatException
异常。 - 转换为浮点数:类似地,
Double.parseDouble(String s)
方法可以将字符串转换为双精度浮点数。
- 转换为整数:可以使用
-
其他数据类型转换为字符串:
- 基本数据类型可以通过
String.valueOf()
方法转换为字符串,例如int i = 10; String str = String.valueOf(i);
。对于对象,调用toString()
方法(如果没有重写toString()
方法,则会返回对象的默认字符串表示形式)也可以将其转换为字符串。例如Object obj = new Object(); String objStr = obj.toString();
。
- 基本数据类型可以通过
-