当前位置: 首页 > article >正文

Java中的String类

在 Java 中,String 类是非常基础且常用的一个类,用于表示不可变的字符序列。几乎所有处理文本的应用程序都会用到 String 类。以下是 String 类的一些关键特性与方法:

  1. 不可变性:一旦一个 String 对象被创建,其内容就不能改变。这保证了 String 对象作为常量的安全性,可以在多线程环境中自由共享而无需担心线程安全性问题。

  2. 存储和优化:由于 String 的不可变性,Java 字符串池(String Pool)能够重用相同的 String 对象,从而节省内存。当创建字符串时,如果字符串字面量存在,JVM 将不会创建新对象,而是返回字符串池中的引用。

  3. 常见方法

    • length():返回字符串的长度。
    • charAt(int index):返回指定索引处的字符。
    • concat(String str):将指定字符串连接到此字符串的末尾。
    • indexOf(String str):返回指定子字符串首次出现的位置。
    • lastIndexOf(String str):返回指定子字符串最后一次出现的位置。
    • substring(int beginIndex) 或 substring(int beginIndex, int endIndex):返回从指定位置开始的子字符串。
    • equals(Object obj):比较两个字符串的内容是否相等。
    • equalsIgnoreCase(String str):比较两个字符串的内容,忽略大小写。
    • toUpperCase() 和 toLowerCase():将字符串转换为大写或小写。
    • trim():删除字符串两端的空白字符。
  4. 构造函数

    • String(char[] value):通过字符数组创建字符串。
    • String(byte[] bytes, Charset charset):通过字节数组和字符集创建字符串。
    • String(String original):复制现有字符串。
  5. 字符串字面量与加法运算
    使用双引号定义的字符串字面量创建的字符串会被放入字符串常量池。字符串加法运算(+ 或 +=)在 Java 7 及更高版本中会自动调用 StringBuilder 类来优化性能。

String 类的构造方法示例

  1. 使用字面量创建:

    String str1 = "Hello";
  2. 使用 new 关键字创建:

    String str2 = new String("World");
  3. 使用字符数组创建:

    char[] chars = {'H', 'e', 'l', 'l', 'o'};
    String str3 = new String(chars);
  4. 使用字节数组创建:

    byte[] bytes = {72, 101, 108, 108, 111}; // ASCII编码的 'Hello'
    String str4 = new String(bytes);
  5. 使用 String 构造函数从另一个 String 对象创建:

    String str5 = new String(str1);

String 类的常见方法示例

  1. 拼接 (concat()+):

    String str6 = str1.concat(str2);
    String str7 = str1 + " " + str2; // 更常用的写法
  2. 长度 (length()):

    int len = str1.length();
  3. 查找子字符串 (indexOf()lastIndexOf()):

    int index = str1.indexOf("el");
    int lastIndex = str1.lastIndexOf("l");
  4. 提取子字符串 (substring()):

    String part = str1.substring(1, 4);
  5. 比较 (equals()equalsIgnoreCase()):

    boolean equals = str1.equals(str1);
    boolean equalsIgnoreCase = str1.equalsIgnoreCase("hELLO");
  6. 转换大小写 (toUpperCase()toLowerCase()):

    String upperCase = str1.toUpperCase();
    String lowerCase = str1.toLowerCase();
  7. 去除空白 (trim()):

    String trimmed = str1.trim();
  8. 替换 (replace()):

    String replaced = str1.replace('H', 'h');
  9. 分割 (split()):

    String[] words = str1.split("l");
  10. 字符获取 (charAt()):

    char ch = str1.charAt(0);
  11. 格式化 (format()):

    String formatted = String.format("%s %s", str1, str2);

完整示例代码

public class StringMethodsDemo {
    public static void main(String[] args) {
        String str1 = "Hello";
        String str2 = "World";
        
        // 拼接
        String str3 = str1.concat(str2);
        System.out.println("Concatenation: " + str3);
        
        // 长度
        System.out.println("Length of str1: " + str1.length());
        
        // 查找子字符串
        int index = str1.indexOf("el");
        System.out.println("Index of 'el': " + index);
        
        // 提取子字符串
        String subStr = str1.substring(1, 4);
        System.out.println("Substring: " + subStr);
        
        // 比较
        boolean equal = str1.equals(str2);
        System.out.println("Are str1 and str2 equal? " + equal);
        
        // 转换大小写
        System.out.println("UpperCase: " + str1.toUpperCase());
        System.out.println("LowerCase: " + str1.toLowerCase());
        
        // 去除空白
        String trimmed = "   Hello   ".trim();
        System.out.println("Trimmed: " + trimmed);
        
        // 替换
        String replaced = str1.replace('H', 'h');
        System.out.println("Replaced: " + replaced);
        
        // 分割
        String[] splitArray = str1.split("l");
        System.out.println("Split: ");
        for (String s : splitArray) {
            System.out.println(s);
        }
        
        // 字符获取
        char ch = str1.charAt(0);
        System.out.println("First char: " + ch);
        
        // 格式化
        String formatted = String.format("%s %s", str1, str2);
        System.out.println("Formatted: " + formatted);
    }
}

http://www.kler.cn/news/357914.html

相关文章:

  • K8s-pod控制器HPA、DS、Job、CJ
  • 【GeekBand】C++设计模式笔记8_Factory Method_工厂方法
  • Android判断蓝牙设备类型
  • 运算符优先级有没有通用原则?
  • 在 PostgreSQL 通过Select语句中动态生成 INSERT 和 UPDATE 语句
  • uniapp获取底部导航tabbar的高度(H5)
  • AvaloniaTCP-v1.0.0:学习使用Avalonia/C#进行TCP通讯的一个简单Demo
  • 前端实现下载功能汇总(下载二进制流文件、数组下载成csv、将十六进制下载成pcap、将文件下载成zip)
  • 国庆旅游高峰期,如何利用可视化报表来展现景区、游客及消费数据
  • 大数据-168 Elasticsearch 单机云服务器部署运行 详细流程
  • R语言机器学习教程大纲
  • Win10+Python3.8+GPU版tensorflow2.x环境搭建最简流程(转载学习用)
  • ArcGIS Pro SDK (十八)栅格
  • 微前端架构及其解决方案对比
  • Windows 11 Mysql 安装及常用命令
  • excel判断某一列(A列)中的数据是否在另一列(B列)中
  • Redis Time Series 数据结构详解与Java实现
  • 浅谈分布式架构
  • three.js 实现模型模型 ,拆解,爆炸,还原的动画效果
  • 薪资管理系统原型PC端+移动端 Axure原型 交互设计 Axure实战项目