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

Java篇String类的常见方法

目录

一. String类的概念

1.1 String类的特性

二. 字符串的构造方式

三. 常用方法

3.1 字符串查找

3.2 字符串转换

3.3 字符串比较

3.3.1 equals( )方法

3.3.2 compare To( )方法

3.3.3 compare ToIgnoreCase( )方法

3.4 字符串替换

3.4.1 replace( )方法

3.4.2 replaceFrist( )方法

3.4.3 replaceAll( )方法

3.5 字符串拆分

3.5.1 String[] split(String regex)

3.5.2 String[] split(String regex, int limit)

 3.6 字符串截取

3.6.1 String substring(int beginIndex)

 3.6.2 String substring(int beginIndex, int endIndex)

​编辑四.StringBuilder和StringBuffer

4.1 append(String str)

4.2 setCharAt(int index, char ch)

4.3 reverse( ) 

 4.4 capacity( ) 

4.5 ensureCapacity(int mininmumCapacity)

 4.6 insert(int offset, String str)

4.7 deleteCharAt(int index)

 4.8 replace(int start, int end, String str)

结语


一. String类的概念

在Java中 String类是用于表示和操作字符串的类,字符串是Java中常用的数据类型,用于存储文本信息,并且String类中提供了许多方法用来执各种字符串操作,那么我们随着下文来学习一下常见的方法。

1.1 String类的特性

1. 不可变性:

String 对象是不可变的,一旦创建了 String 对象,其里面的内容就不能被修改,对 String的任何操作实际上都是创建了一个新的 String 对象。

注意:不能修改指的是:String对象的内容不能修改,而指向String对象的引用是可以修改的

2. 常量池的概念

字符串常量池是Java中用于存储字符串字面量的内存区域,为了节省内存,Java使用字符常量池来存储字符串字面量,当创建相同的字符串字面量时,它们会引用常量池中的同一个对象,从而降低程序内存的开销。

二. 字符串的构造方式

1. 使用字符串字面量构造

​
public class Test {
    public static void main(String[] args) {
        String s1 = "hello world"; //直接使用字符串字面量进行构造
        System.out.println(s1);
    }
}

​

2. 通过new关键字创建一个String对象

public class Test {
    public static void main(String[] args) {
        String s2 = new String("hello world");//通过new关键字创建对象
        System.out.println(s2);
    }
}

3.使用字符数组进行构造

public class Test {
    public static void main(String[] args) {
        char[] str = {'h','e','l','l','o','w','o','r','l','d'};
        String s3 = new String(str); //使用字符数组进行构造
        System.out.println(s3);
    }
}

以上就是最常见的最常见的字符串构造方式。

三. 常用方法

3.1 字符串查找

(1)char charAt( int index)

public class Test {
    public static void main(String[] args) {
        String str="hello world";
        char ch=str.charAt(1);
        System.out.println(ch);//e
    }
}

如果输入一个不合法的下标位置,就会发生报错:

(2)int indexOf( int ch)

public class Test {
    public static void main(String[] args) {
        String str="hello world";
        int n=str.indexOf('l');
        System.out.println(n); //2
    }
}

(3)int indexOf(int ch, int fromIndex)

public class Test {
    public static void main(String[] args) {
        String str="hello world";
        int n=str.indexOf('o',6);
        //从下标为6的位置(w)开始往后查找o的位置,7
        System.out.println(n);
    }
}

(4)int indexOf(String str)

public class Test {
    public static void main(String[] args) {
        String str="hello worldwor";
        int n=str.indexOf("wor");
        // 返回wor第一次出现的位置,没有返回-1,所以返回值为6
        System.out.println(n);
    }
}
(5)int indexOf(String str, int fromIndex) 
public class Test {
    public static void main(String[] args) {
        String str="hello worldwor";
        int n=str.indexOf("wor",8);
        //从下标为8的位置开始找wor第一次出现的位置,没有返回-1,所以这里返回值为11
        System.out.println(n);
    }
}

(6)int lastIndexOf(int ch)

public class Test {
    public static void main(String[] args) {
        String str="hello worldwor";
        int n=str.lastIndexOf('w');
        //从后往前找,返回w第一次出现的位置,没有返回-1,所以返回值为11
        System.out.println(n);
    }
}

(7)int lastIndexOf(int ch, int fromIndex)

public class Test {
    public static void main(String[] args) {
        String str="hello worldwor";
        int n=str.lastIndexOf('w',10);
        //从下标10的位置开始找,从后往前找w第一次出现的位置,没有返回-1,所以返回值为6
        System.out.println(n);
    }
}
(8)int lastIndexOf(String str)
public class Test {
    public static void main(String[] args) {
        String str="hello worldwor";
        int n=str.lastIndexOf("wor");
        //从后往前找,返回wor第一次出现的位置,没有返回-1,返回值为11
        System.out.println(n);
    }
}

(9)int lastIndexOf(String str, int fromIndex)

public class Test {
    public static void main(String[] args) {
        String str="hello worldwor";
        int n=str.lastIndexOf("wor",10);
        //从下标为10的位置开始找,从后往前找wor第一次出现的位置,没有则返回-1,这里返回值为6
        System.out.println(n);
    }
}

3.2 字符串转换

(1) 数值和字符串转化

数值转换成字符串,用String.valueOf( )进行转换:

public class Test {
    public static void main(String[] args) {
        // 数字转字符串
        String s1 = String.valueOf(123456);
        String s2 = String.valueOf(13.14521);
        System.out.println(s1);
        System.out.println(s2);
    }
}

数字字符串转换成数字,用 Interger.valueOf( )进行转换:

public class Test {
    public static void main(String[] args) {
        // 字符串转数字
        int n= Integer.valueOf("1234");
       double m= Double.valueOf("12.13");
        System.out.println(n);
        System.out.println(m);
    }
}

并且我们也可以传数字字符串,所需要转换的进制数:

public class Test {
    public static void main(String[] args) {
        // 字符串转数字
       int n=Integer.valueOf("1111",2);
       //后面的2表示,前面的数字字符串中的数字是2进制的形式,我们转换成10进制形式
        //就是15
        System.out.println(n);
    }
}

(2)字母的大小写转换

字母大小写转换我们使用String.toUpperCase----小写转大写 String.toLowerCase----大写转小写

public class Test {
    public static void main(String[] args) {
        String s1 = "hello";
        String s2 = "HELLO";
    // 小写转大写
        System.out.println(s1.toUpperCase());//HELLO
    // 大写转小写
        System.out.println(s2.toLowerCase());//hello
    }
}

(3)字符串转数组

我们还可以将一个字符串转换成一个数组,使用String.toCharArray( )方法进行转换:

public class Test {
    public static void main(String[] args) {
        String s = "hello";
        // 字符串转数组
        char[] ch = s.toCharArray();
        for (int i = 0; i < ch.length; i++) {
            System.out.print(ch[i]);
        }
    }
}

(4)格式化字符串

我们可以使用String.format( )方法进行字符串的格式化:

public class Test {
    public static void main(String[] args) {
        String s = String.format("%d-%d-%d", 2024, 10,30);
        System.out.println(s);
        //打印2024-10-30
    }
}

3.3 字符串比较

当我们比较基本数据类型的对象的时候,使用 == 可以进行比较,但是对于我们的String类型(引用类型)来说,使用 == 进行比较,比较的是引用中的地址:

从上图就可以发现 str1和str2中存放的的字符串是一样的,但是运行结果显示并不相等,那么当我们需要进行字符串比较的时候该怎么办呢?

3.3.1 equals( )方法

equals( )方法的比较方式:按照字典序比较--->比较的是字符大小的顺序

3.3.2 compare To( )方法

compare To( )方法的比较方法:按照字典序进行比较 ----> compare To( )方法与equals( )方法的区别:equals( )方法的返回值是 boolean 类型的值,而 compare To( )方法返回的是 int 类型的值。

1. 先按照字典次序大小比较,如果出现不等的字符,直接返回这两个字符的大小差值。
2. 如果前k个字符相等(k为两个字符长度最小值),返回值两个字符串长度差值。

3.3.3 compare ToIgnoreCase( )方法

该方法与compare To( )方法没有很大差别,但是compare ToIgnoreCase( )方法在进行比较的时候能够忽略字符的大小写:

3.4 字符串替换

3.4.1 replace( )方法

replace( )方法能够将一个字符串中指定的字符替换成一个新指定的字符

3.4.2 replaceFrist( )方法

 replaceFrist( )方法能够将字符串中指定的第一个字符串替换成新指定的字符串

3.4.3 replaceAll( )方法

 replaceAll( )方法 与 replaceFrist( )方法不同的是: replaceAll( )方法能将字符串中所有指定的字符串全部替换成一个新指定的字符串

3.5 字符串拆分

3.5.1 String[] split(String regex)

String[] split( )方法能够将一个字符串按照指定的字符为分割线,分割成若干个子字符串:

3.5.2 String[] split(String regex, int limit)

String[] split(String regex, int limit)方法能够将字符串按照指定的格式,分割成 limit 个子字符串:

 3.6 字符串截取

3.6.1 String substring(int beginIndex)

将字符串从下标为 beginIndex 的位置开始截取到字符串结尾:

 3.6.2 String substring(int beginIndex, int endIndex)

将字符串从下标为 beginIndex 的位置开始截取到 endIndex 位置的前一个字符为止:

四.StringBuilderStringBuffer

在开头的String类的特征中,我们就说明了String类的不可变性,对 String 对象的任何修改操作都会创建一个新的对象,在程序运行的过程中,效率是很低的,那么这个时候如果要对字符串进行修改尽量使用StringBuffer或者StringBuilder

由于 String 的不可更改特性,为了方便字符串的修改, Java 中又提供 StringBuilder StringBuffer 类。这两个类大部分功能是相同的

在这里介绍一下Stringbuilder一些常用的方法。

4.1 append(String str)

append(String str)方法可以在字符串的末尾追加新的内容:

注意:追加的不只是字符串,还可以追加:booleancharchar[]doublefloatintlongObjectStringStringBuff类型的变量。 

4.2 setCharAt(int index, char ch)

setChatAt(int index, char ch)方法能够将 index位置的字符替换成ch:

4.3 reverse( ) 

将字符串进行反转:

 4.4 capacity( ) 

capacity( ) 方法可以获取底层保存字符串空间总的大小:

4.5 ensureCapacity(int mininmumCapacity)

将该字符串的内存空间扩展到指定的空间大小:

 4.6 insert(int offset, String str)

在指定的下标位置插入一个字符串:

4.7 deleteCharAt(int index)

删除指定下标的字符:

 补充:delete(int start, int end)能够删除[start, end)区间内的字符:

 4.8 replace(int start, int end, String str)

[start, end)位置的字符替换为str:

注意StringStringBuilder类不能直接转换。如果要想互相转换,可以采用如下原则

1. String变为StringBuilder: 利用StringBuilder的构造方法或append()方法
2. StringBuilder变为String: 调用toString()方法

结语

以上就是本期的内容啦,希望大家看完本篇能够收获满满 ≧◉◡◉≦,让我们一起进步~在此感谢大家的观看!!!


http://www.kler.cn/a/400246.html

相关文章:

  • Java-异步方法@Async+自定义分布式锁注解Redission例子
  • Vue3中实现插槽使用
  • vulhub之log4j
  • Linux下编译MFEM
  • uniapp luch-request 使用教程+响应对象创建
  • 编写一个生成凯撒密码的程序
  • 基于YOLOv8深度学习的智慧交通非机动车驾驶员头盔佩戴检测系统
  • Matlab实现白鲸优化算法优化随机森林算法模型 (BWO-RF)(附源码)
  • 在Keil中使用ST-LINK烧录STM32程序指南
  • 聚焦 AUTO TECH 2025华南展:探索新能源汽车发展新趋势
  • 美赛优秀论文阅读--2023C题
  • Spring Boot汽车资讯:数字化时代的驾驶
  • 前端性能优化深入解析:提升用户体验的几个关键点
  • 工具类-基于 axios 的 http 请求工具 Request
  • ELK8.15.4搭建开启安全认证
  • 基于Vue3与ABP vNext 8.0框架实现耗时业务处理的进度条功能
  • 常见网络厂商设备默认用户名/密码大全
  • 移动端web页面调用原生jsbridge的封装
  • java ssm 高速公路管理系统 公路收费管理 高速收费管理 源码 jsp
  • 【Android】Proxyman 抓 HTTP 数据包
  • 4 设计模式原则之接口隔离原则
  • 【开源风云】从若依系列脚手架汲取编程之道(七)
  • 【青牛科技】D7312带 ALC 双通道前置放大器电路
  • C语言常用语句总结
  • 跨平台WPF框架Avalonia教程 三
  • C++20中的Concepts与TypeScript