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. 如何反转一个字符串?

使用StringBuilderStringBufferreverse()方法反转字符串。

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');