带你快速掌握Java中的String类和StringBuffer类(详解常用方法 | 区别 )

简介: 带你快速掌握Java中的String类和StringBuffer类(详解常用方法 | 区别 )

本文介绍了Java中字符串操作的常用方法,如获取长度、字符操作、索引查找、字符串转换、拼接、分割、替换以及String和StringBuffer类的区别,重点讲解了这两种类在处理字符串时的特性和适用场景。


String类

1.获取功能的常用方法

int length( )          获取字符串长度

char charAt( )     获取指定位置上的字符

int indexOf( )      获取字符首次出现的位置,也可以从指定位置开始查找

lastIndexOf( )     从后往前找

String substring( )   从指定位置开始截取一个字符串副本

 public static void main(String[] args) {
        //获取功能
        String s1 = "abcdabcd";
 
        //int length() 获取字符串长度
        System.out.println(s1.length());   // 8
        
        //char charAt() 获取指定位置上的字符 
        System.out.println(s1.charAt(4));  //索引4对应的字符 a
        
        //int indexOf() 获取字符首次出现的位置
        System.out.println(s1.indexOf("a"));  //注意是首次出现的位置
        
        //int indexOf(str:  ,fromindex: )   从指定位置开始查找
        System.out.println(s1.indexOf("a",4));
        
        //lastIndexOf() 从后往前找
        System.out.println(s1.lastIndexOf("a"));
        
        //String substring() 从指定位置开始截取一个字符串副本
        String s2=s1.substring(2,6);   //截取索引2~6的字符串(不包含索引6对应的字符)
        System.out.println(s2);     //   2 <= res < 6
 
    }

2.转换功能的常用方法

String toUpperCase( )     将字符串内容全部转换为大写

String toLowerCase( )     将字符串内容全部转换为小写

String concat(String str)  拼接指定字符串内容到原字符串末尾

String [ ] split(分割符)      通过分割符将字符串分割并以数组形式返回

public static void main(String[] args) {
 
        String s1="WoShiChinese";
        System.out.println(s1.toUpperCase()); //转大写
        System.out.println(s1.toLowerCase()); //转小写
 
        String s2 ="我爱中国";
        System.out.println(s2.concat(s1));  //拼接s1字符串内容到s2字符串末尾
 
        //String[] split(分割符)
        String s3 = "张三:中国人;"+"Tom:英国人;"+"梅西:阿根廷人;";
        String[] strings = s3.split(";");  //通过" ; "来截取s3字符串
        System.out.println(Arrays.toString(strings));
    }

3.替换功能的常用方法

String replace(char old,char new)          单个字符替换

String replace(String old,String new)      整个字符串替换

replaceAll(String regex, String replacement)     替换字符串中所有数字

replaceFirst(String regex, String replacement)   替换字符串中第一个数字

 public static void main(String[] args) {
        String s1 = " ab5cd7bda";
        //用"A"替换字符串中所有的"a"
        System.out.println(s1.replace("a","A"));
        //用"G"替换字符串中所有数字       \\d表示所有字符串中所有的数字
        System.out.println(s1.replaceAll("\\d","G"));
        //用"R"替换字符串中第一个数字
        System.out.println(s1.replaceFirst("\\d","R"));
    }

4.去除字符串两端空格

String trim( )    去除字符串两端空格(字符串中间的空格不能去除

public static void main(String[] args) {
        
        //String trim() 去除字符串两端空格
 
        String s2 =" abcEF 13aD1 ";
        System.out.println(s2);
        System.out.println(s2.length());         //原字符串长度
        System.out.println(s2.trim());//去除两端空格,字符串中间的空格不能去除
        System.out.println(s2.trim().length());  //去除空格后字符串的长度
 
    }

StringBuffer类

需要注意:

String可以直接创建字符串对象,而StringBuffer不能,需要新创建一个字符串对象。

          String s1 = "abc";
          StringBuffer s2 = new StringBuffer("abc");

添加功能

public StringBuffer append(String str)         在原字符串末尾添加字符串

public static void main(String[] args) {
 
        StringBuffer s1 = new StringBuffer("abc");
        s1.append("def");         // 不能使用+=
        System.out.println(s1);
    }

输出:abcdef

public StringBuffer insert(int offset,String str)   向指定位置插入字符串

public static void main(String[] args) {
        StringBuffer s1 = new StringBuffer("abc");
        //向字符串s1末尾添加"def"
        s1.append("def");         // 不能使用+=
        System.out.println(s1);
 
        //向指定位置插入字符串
        s1.insert(1,"ABC");  //向索引为1的位置插入字符串"ABC"
        System.out.println(s1);
    }

输出:aABCbcdef

删除功能

public StringBuffer deleteCharAt(int index)      删除单个字符

public StringBuffer delete(int start,int end)      删除指定区间的元素,不包含结尾

public static void main(String[] args) {
        StringBuffer s1 = new StringBuffer("abcdef");
        s1.deleteCharAt(2);  //删除索引为2的字符
        System.out.println(s1);
 
        //删除指定区间的元素,不包含结尾
        StringBuffer s2 = new StringBuffer("ABCDEF");
        s2.delete(1,3);
        System.out.println(s2);
    }

替换功能

public StringBuffer replace(int start,int end,String str)

StringBuffer s1 = new StringBuffer("abcdef");
        s1.replace(0,3,"ABC");
        System.out.println(s1);

输出:ABCdef

反转功能

public StringBuffer reverse( )

StringBuffer s1 = new StringBuffer("abcdef");
        s1.reverse();   //反转
        System.out.println(s1);

输出:fedcba

截取功能

从StringBuffer中截取一个副本,返回给一个新的String对象,StringBuffer对象不变

public static void main(String[] args) {
        StringBuffer s1 = new StringBuffer("abcdef");
        //从StringBuffer中截取一个副本,返回给一个新的String对象,StringBuffer对象不变
        String s2=s1.substring(1,4);
        System.out.println(s1);
        System.out.println(s2);
    }


StringBuffer和String的区别

String修饰的字符串是一个值不能改变的字符串,用String声明的字符串对象值一旦给定就不能改变了,每次拼接都会创建新的字符串对象,耗时且占用空间。


StringBuffer是内容可以改变的字符串,值可以改变且不需要创建新对象,在多任务执行时是安全的适合单线程。

 

相关文章
|
2月前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
57 2
|
3月前
|
安全 Java 测试技术
Java零基础-StringBuffer 类详解
【10月更文挑战第9天】Java零基础教学篇,手把手实践教学!
63 2
|
3月前
|
存储 安全 C++
【C++打怪之路Lv8】-- string类
【C++打怪之路Lv8】-- string类
30 1
|
2月前
|
Java 开发者
在 Java 中,一个类可以实现多个接口吗?
这是 Java 面向对象编程的一个重要特性,它提供了极大的灵活性和扩展性。
156 57
|
5月前
|
Java 开发者
奇迹时刻!探索 Java 多线程的奇幻之旅:Thread 类和 Runnable 接口的惊人对决
【8月更文挑战第13天】Java的多线程特性能显著提升程序性能与响应性。本文通过示例代码详细解析了两种核心实现方式:Thread类与Runnable接口。Thread类适用于简单场景,直接定义线程行为;Runnable接口则更适合复杂的项目结构,尤其在需要继承其他类时,能保持代码的清晰与模块化。理解两者差异有助于开发者在实际应用中做出合理选择,构建高效稳定的多线程程序。
65 7
|
3月前
|
Java 开发者
在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口
【10月更文挑战第20天】在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口。本文揭示了这两种方式的微妙差异和潜在陷阱,帮助你更好地理解和选择适合项目需求的线程创建方式。
39 3
|
3月前
|
Java
Java中多线程编程的基本概念和创建线程的两种主要方式:继承Thread类和实现Runnable接口
【10月更文挑战第20天】《JAVA多线程深度解析:线程的创建之路》介绍了Java中多线程编程的基本概念和创建线程的两种主要方式:继承Thread类和实现Runnable接口。文章详细讲解了每种方式的实现方法、优缺点及适用场景,帮助读者更好地理解和掌握多线程编程技术,为复杂任务的高效处理奠定基础。
44 2
|
3月前
|
Java 开发者
Java多线程初学者指南:介绍通过继承Thread类与实现Runnable接口两种方式创建线程的方法及其优缺点
【10月更文挑战第20天】Java多线程初学者指南:介绍通过继承Thread类与实现Runnable接口两种方式创建线程的方法及其优缺点,重点解析为何实现Runnable接口更具灵活性、资源共享及易于管理的优势。
49 1
|
5月前
|
Oracle 安全 Java
JDK8到JDK28版本升级的新特性问题之在Java 15及以后的版本中,密封类和密封接口是怎么工作的
JDK8到JDK28版本升级的新特性问题之在Java 15及以后的版本中,密封类和密封接口是怎么工作的
|
5月前
|
安全 Java
【Java集合类面试三】、Map接口有哪些实现类?
这篇文章介绍了Java中Map接口的几种常用实现类:HashMap、LinkedHashMap、TreeMap和ConcurrentHashMap,以及它们适用的不同场景和线程安全性。