Java String面试题
1. String类在Java中是可变的还是不可变的?
String类在Java中是不可变的(immutable),这意味着一旦创建了String对象,就不能更改它的内容。
2. 为什么String类是不可变的?
- 保证String对象的安全性,因为String对象常作为公共资源使用(如字符串常量池)。
- 允许String对象缓存散列值。
- 简化了内存管理。
3. 如何比较两个字符串是否相等?
应该使用equals()
方法比较两个字符串的内容是否相等,而不是使用==
,因为==
比较的是对象引用。
String str1 = "Hello";
String str2 = "Hello";
if (str1.equals(str2)) {
System.out.println("Strings are equal");
}
4. String和StringBuffer有什么区别?
- String是不可变的,而StringBuffer是可变的。
- StringBuffer是线程安全的,而String不是。
String str = "Hello";
StringBuffer buffer = new StringBuffer("World");
str += " World"; // 创建新的String对象
buffer.append(" World"); // 在原有对象上修改
5. String和StringBuilder有什么区别?
- String是不可变的,而StringBuilder是可变的。
- StringBuilder不是线程安全的,而StringBuffer是线程安全的。
String str = "Hello";
StringBuilder builder = new StringBuilder("World");
str += " World"; // 创建新的String对象
builder.append(" World"); // 在原有对象上修改
6. 如何将字符串转换为字符数组?
使用toCharArray()
方法将字符串转换为字符数组。
String str = "Hello";
char[] chars = str.toCharArray();
7. 如何反转一个字符串?
使用StringBuilder
或StringBuffer
的reverse()
方法反转字符串。
String str = "Hello";
String reversedStr = new StringBuilder(str).reverse().toString();
8. 如何检查一个字符串是否以特定的前缀开始?
使用startsWith()
方法检查字符串是否以特定的前缀开始。
String str = "HelloWorld";
if (str.startsWith("Hello")) {
System.out.println("String starts with 'Hello'");
}
9. 如何检查一个字符串是否以特定的后缀结束?
使用endsWith()
方法检查字符串是否以特定的后缀结束。
String str = "HelloWorld";
if (str.endsWith("World")) {
System.out.println("String ends with 'World'");
}
10. 如何替换字符串中的字符?
使用replace()
或replaceAll()
方法替换字符串中的字符。
String str = "Hello World";
String replacedStr = str.replace("World", "Java");
11. 如何截取字符串的一部分?
使用substring()
方法截取字符串的一部分。
String str = "Hello World";
String subStr = str.substring(6);
12. 如何将字符串转换为全大写或全小写?
使用toUpperCase()
和toLowerCase()
方法将字符串转换为全大写或全小写。
String str = "Hello World";
String upperCaseStr = str.toUpperCase();
String lowerCaseStr = str.toLowerCase();
13. 如何去除字符串两端的空白?
使用trim()
方法去除字符串两端的空白。
String str = " Hello World ";
String trimmedStr = str.trim();
14. 如何计算字符串的长度?
使用length()
方法计算字符串的长度。
String str = "Hello World";
int length = str.length();
15. 如何查找子字符串在字符串中的位置?
使用indexOf()
方法查找子字符串在字符串中的位置。
String str = "Hello World";
int index = str.indexOf("World");
16. 如何分割字符串?
使用split()
方法分割字符串。
String str = "Hello,World,Java";
String[] parts = str.split(",");
17. 如何连接字符串?
使用concat()
方法或+
操作符连接字符串。
String str1 = "Hello";
String str2 = "World";
String concatenatedStr = str1.concat(str2);
// 或者
String concatenatedStr = str1 + str2;
18. 如何格式化字符串?
使用String.format()
方法格式化字符串。
String name = "World";
String greeting = String.format("Hello, %s!", name);
19. 如何将对象转换为字符串?
使用String.valueOf()
方法或toString()
方法将对象转换为字符串。
Object obj = "Hello";
String str = String.valueOf(obj);
// 或者
String str = obj.toString();
20. 如何将基本数据类型转换为字符串?
使用String.valueOf()
方法或toString()
方法将基本数据类型转换为字符串。
int number = 123;
String str = String.valueOf(number);
// 或者
String str = Integer.toString(number);
21. 如何将字符串拆分为行?
使用split("\\R")
方法将字符串拆分为行,其中\\R
是一个正则表达式,匹配任何类型的换行符。
String str = "Hello\nWorld\r\nJava";
String[] lines = str.split("\\R");
22. 如何检查字符串是否为空?
使用isEmpty()
方法检查字符串是否为空。
String str = "";
if (str.isEmpty()) {
System.out.println("String is empty");
}
23. 如何在字符串中替换所有出现的字符或子字符串?
使用replaceAll()
方法在字符串中替换所有出现的字符或子字符串。
String str = "Hello World";
String replacedStr = str.replaceAll("l", "LL");
24. 如何在字符串中插入新的子字符串?
使用insert()
方法在字符串中插入新的子字符串。
String str = "Hello World";
String insertedStr = new StringBuilder(str).insert(5, "Java ").toString();
25. 如何将字符串中的字符替换为其他字符?
使用replace()
方法将字符串中的字符替换为其他字符。
String str = "Hello World";
String replacedStr = str.replace('l', 'k');