Java中String类字符串怎么用

发布时间:2021-10-19 17:05:43 作者:小新
来源:亿速云 阅读:172
# Java中String类字符串怎么用

## 一、String类概述

String类是Java语言中最常用的类之一,用于表示和操作字符串。在Java中,字符串是不可变的(immutable),这意味着一旦创建了一个String对象,它的值就不能被改变。任何看似修改字符串的操作,实际上都是创建了一个新的String对象。

### 1.1 String类的重要性
- 字符串处理是编程中最常见的操作之一
- Java中所有双引号括起来的文本都是String类的实例
- String类提供了丰富的方法用于字符串操作
- 字符串在内存管理上有特殊处理(字符串常量池)

### 1.2 String类的不可变性
```java
String str = "hello";
str = str + " world";  // 实际上是创建了新对象

不可变性的优点: - 线程安全 - 可以缓存hash值 - 适合作为Map的key - 字符串常量池的实现基础

二、创建String对象

2.1 直接赋值方式

String str1 = "Java";  // 使用字符串常量池

特点: - JVM会先检查字符串常量池 - 如果存在则直接引用,否则创建新对象并放入池中 - 效率较高,推荐使用

2.2 构造方法创建

String str2 = new String("Java");  // 强制创建新对象

特点: - 无论常量池是否存在,都会在堆中创建新对象 - 可能造成内存浪费 - 适用于需要明确新建对象的场景

2.3 不同创建方式的比较

String a = "abc";
String b = "abc";
String c = new String("abc");
String d = new String("abc");

System.out.println(a == b);  // true
System.out.println(a == c);  // false
System.out.println(c == d);  // false
System.out.println(a.equals(c));  // true

三、String类的常用方法

3.1 获取字符串信息

String str = "Hello World";

// 获取长度
int len = str.length();  // 11

// 获取指定位置字符
char ch = str.charAt(1);  // 'e'

// 获取子字符串位置
int index1 = str.indexOf('o');  // 4
int index2 = str.indexOf("World");  // 6
int index3 = str.lastIndexOf('o');  // 7

3.2 字符串比较

String s1 = "Java";
String s2 = "java";
String s3 = "Java";

// 区分大小写比较
boolean b1 = s1.equals(s2);  // false

// 不区分大小写比较
boolean b2 = s1.equalsIgnoreCase(s2);  // true

// 比较引用地址
boolean b3 = (s1 == s3);  // true (如果使用常量池)

// 字典序比较
int result = s1.compareTo(s2);  // 负数(s1 < s2)

3.3 字符串操作

String original = " Java Programming ";

// 去除首尾空格
String trimmed = original.trim();  // "Java Programming"

// 转换为大写/小写
String upper = original.toUpperCase();  // " JAVA PROGRAMMING "
String lower = original.toLowerCase();  // " java programming "

// 替换字符或字符串
String replaced = original.replace('a', 'A');  // " JAvA ProgrAmming "
String replacedAll = original.replaceAll("a", "A");  // " JAvA ProgrAmming "

// 拼接字符串
String concated = original.concat(" Language");  // " Java Programming  Language"

3.4 字符串分割与连接

String fruits = "apple,orange,banana,grape";

// 分割字符串
String[] fruitArray = fruits.split(",");
// ["apple", "orange", "banana", "grape"]

// 使用正则表达式分割
String complex = "a b  c   d";
String[] parts = complex.split("\\s+");  // 按一个或多个空格分割
// ["a", "b", "c", "d"]

// 字符串数组连接
String joined = String.join("-", "2020", "10", "20");  // "2020-10-20"

四、String与其他类型的转换

4.1 基本类型转String

// 多种转换方式
int num = 123;
String s1 = num + "";  // 简单但效率不高
String s2 = String.valueOf(num);  // 推荐方式
String s3 = Integer.toString(num);

4.2 String转基本类型

String numStr = "123";

// 使用包装类的parse方法
int i = Integer.parseInt(numStr);
double d = Double.parseDouble("3.14");
boolean b = Boolean.parseBoolean("true");

// 注意处理NumberFormatException
try {
    int n = Integer.parseInt("abc");
} catch (NumberFormatException e) {
    System.out.println("数字格式错误");
}

4.3 字符数组与String转换

// String转字符数组
String str = "hello";
char[] charArray = str.toCharArray();

// 字符数组转String
char[] arr = {'J', 'a', 'v', 'a'};
String newStr1 = new String(arr);
String newStr2 = String.valueOf(arr);

五、StringBuilder和StringBuffer

5.1 为什么需要可变字符串类

String的不可变性导致频繁修改时性能低下:

String result = "";
for (int i = 0; i < 10000; i++) {
    result += i;  // 每次循环都创建新对象
}

5.2 StringBuilder使用

StringBuilder sb = new StringBuilder();
for (int i = 0; i < 10000; i++) {
    sb.append(i);  // 不会创建新对象
}
String result = sb.toString();

常用方法: - append(): 追加内容 - insert(): 插入内容 - delete(): 删除内容 - reverse(): 反转字符串

5.3 StringBuffer与StringBuilder的区别

六、字符串性能优化

6.1 字符串常量池的使用

// 推荐方式 - 使用常量池
String s1 = "hello";

// 不推荐方式 - 创建新对象
String s2 = new String("hello");

6.2 字符串拼接优化

// 低效方式(编译后自动优化为StringBuilder)
String result = str1 + str2 + str3;

// 高效方式
StringBuilder sb = new StringBuilder();
sb.append(str1).append(str2).append(str3);
String result = sb.toString();

6.3 intern()方法的使用

String s1 = new String("hello").intern();
String s2 = "hello";
System.out.println(s1 == s2);  // true

intern()方法的作用: - 将字符串放入常量池(如果池中不存在) - 返回池中的引用

七、Java 8及以后版本的字符串增强

7.1 String.join()方法

// 使用分隔符连接多个字符串
String joined = String.join(", ", "Java", "Python", "C++");
// "Java, Python, C++"

7.2 String类的chars()方法

// 获取IntStream处理字符
"hello".chars().forEach(c -> System.out.print((char)c));

7.3 Java 11新增方法

// 判断字符串是否空白
boolean blank = "   ".isBlank();  // true

// 去除首尾空白(包括全角空格等)
String stripped = "  hello  ".strip();  // "hello"

// 重复字符串
String repeated = "Java".repeat(3);  // "JavaJavaJava"

// 按行分割字符串
String text = "line1\nline2\nline3";
String[] lines = text.lines().toArray(String[]::new);

八、实际应用示例

8.1 用户输入验证

public boolean isValidUsername(String username) {
    if (username == null || username.isBlank()) {
        return false;
    }
    return username.matches("[a-zA-Z0-9_]{4,16}");
}

8.2 文件路径处理

String path = "/usr/local/bin/java";
String[] parts = path.split("/");
String filename = path.substring(path.lastIndexOf("/") + 1);

8.3 敏感信息过滤

public String filterSensitiveWords(String content, Set<String> sensitiveWords) {
    String result = content;
    for (String word : sensitiveWords) {
        result = result.replace(word, "***");
    }
    return result;
}

九、总结

Java中的String类提供了丰富的字符串操作方法,理解其不可变性和内存管理机制对于编写高效程序至关重要。在实际开发中:

  1. 优先使用直接赋值方式创建字符串
  2. 频繁修改字符串时使用StringBuilder/StringBuffer
  3. 合理使用字符串常量池优化内存
  4. 注意字符串比较时equals和==的区别
  5. 利用Java新版本提供的增强方法简化代码

掌握String类的使用是Java开发的基础,合理运用可以显著提高程序性能和代码质量。 “`

推荐阅读:
  1. Java中String类的用法
  2. Java中的String类是什么

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

java string

上一篇:Spring如何实现校验validator和JSR-303

下一篇:如何理解JavaScript数组及非数组对象的深浅克隆原理

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》