Java字符串类详解

简介: Java字符串类详解

在Java中封装了三个字符串类,分别为String、StringBuffer、StringBilder。

一、String类

String类是一个final类,其具有不可变性使用String类拼接字符串时应该注意:

常量与常量的拼接结果在常量池。且常量池中不会存在相同内容的常量。

只要其中有一个是变量,结果就在堆中

如果拼接的结果调用 intern() 方法,返回值就在常量池中

String类比较常用,其构造方法如下:

方法声明

功能描述

String()

创建一个内容为空的字符串

String(String value)

根据指定的字符串内容创建对象

String(char[] value)

根据指定的字符数组创建对象

String(byte[] bytes)

根据指定的字节数组创建对象

由于String类比较常用,也可以直接定义字符串常量:String str="abc";

String类的常用方法有:

方法声明

功能描述

int indexOf(int ch)

返回指定字符ch在字符串中第一次出现位置的索引 

int lastIndexOf(int ch)

返回指定字符ch在字符串中最后一次出现位置的索引

int indexOf(String str)

返回指定子字符串str在字符串第一次出现位置的索引

int lastIndexOf(String str)

返回指定子字符串str在此字符串中最后一次出现位置的索引

char charAt(int index) 

返回字符串中index位置上的字符,其中index的取值范围是0~(字符串长度-1)

Boolean endsWith(String suffix)

判断此字符串是否以指定的字符串结尾

int length()

返回此字符串的长度

boolean equals(Object anObject)

将此字符串与指定的字符串比较

boolean isEmpty()

判断字符串长度是否为0,如果为0则返回true,反之则返回flase

boolean startsWith(String prefix)

判断此字符串是否以指定的字符串开始

boolean contains(CharSequence cs)

判断此字符串中是否包含指定的字符序列

String toLowerCase()

使用默认语言环境的规则将String中的所有字符都转换为小写

String toUpperCase()

使用默认语言环境的规则将String中的所有字符都转换为大写

static String valueOf(int i)

将int变量i转换成字符串

char[] toCharArray()

将此字符串转换为一个字符数组

String replace(CharSequence oldstr, CharSequence newstr)

返回一个新的字符串,它是通过用 newstr替换此字符串中出现的所有 oldstr得到的

String[] split(String regex)

根据参数regex将原来的字符串分割为若干个子字符串

String substring(int beginIndex)

返回一个新字符串,它包含从指定的beginIndex处开始,直到此字符串末尾的所有字符

String substring(int beginIndex, int endIndex) 

返回一个新字符串,它包含从指定的beginIndex处开始,直到索引endIndex-1处的所有字符

String trim() 

返回一个新字符串,它去除了原字符串首尾的空格

String类的练习题:

1.模拟一个trim方法,去除字符串两端的空格

@Test
    /**
     * 模拟一个trim方法,去除字符串两端的空格
     */
    public void test1(){
        String s=" 1 23 ";
        String s1=s.replaceFirst(" ","");
        char[] chars=s1.toCharArray();
        char[] chars1=new char[chars.length-1];
        for(int i=0;i<chars.length-1;i++){
            chars1[i]=chars[i];
        }
        String s2=new String(chars1);
        System.out.println(s);
        System.out.println(s2);
    }

运行结果为:

1 23

1 23

2. 将一个字符串进行反转。将字符串中指定部分进行反转。比如 “ab cdef g”

转为 ”ab fedc g”

@Test
    /**
     * 将一个字符串进行反转。将字符串中指定部分进行反转。比如“abcdefg”反
     * 转为”abfedcg”
     */
    public void test2(){
        String str="abcdefg";
        String substr="bcd";
        int index=str.indexOf(substr);
        char[] chars=str.toCharArray();
        for(int i=index,k=0;i<(index+substr.length())/2;i++,k++){
           char ch=chars[i];
           chars[i]=chars[index+substr.length()-1-k];
           chars[index+substr.length()-1-k]=ch;
        }
        String str1=new String(chars);
        System.out.println(str);
        System.out.println(substr);
        System.out.println(str1);
    }

运行结果为:

abcdefg

bcd

adcbefg

3. 获取一个字符串在另一个字符串中出现的次数

@Test
    /**
     * 获取一个字符串在另一个字符串中出现的次数
     */
    public void test3(){
        String str="uibufangqijuiayubufw";
        String substr="buf";
        int count=0;
        int index=0;
        while(str.indexOf(substr,index)>=0){
            count++;
            index=str.indexOf(substr,index)+1;
        }
        System.out.println(count);
    }

运行结果:2

4. 对字符串字符进行自然排序

@Test
    /**
     * 对字符串中字符进行自然顺序排序
     */
    public void test5(){
        String s="908762";
        char[] chars=s.toCharArray();
        for(int i=0;i<chars.length;i++){
            for(int j=0;j<chars.length-i-1;j++){
                if(chars[j+1]<chars[j]){
                    char temp=chars[j+1];
                    chars[j+1]=chars[j];
                    chars[j]=temp;
                }
            }
        }
        String s1=new String(chars);
        System.out.println(s1);
 
    }

运行结果:026789

5. 获取两个字符串中最大相同子串。比如:

str1 = "abcwerthelloyuiodef“;str2 = "cvhellobnm"

@Test
    /**
     * 获取两个字符串中最大相同子串。比如:
     * str1 = "abcwerthelloyuiodef“;str2 = "cvhellobnm"
     */
    public void test6(){
        String str1="abcwerthellobyuiodef";
        String str2="cvhellobnm";
        String str;
        String  max=str1.length()>=str2.length()?str1:str2;
        String  min=str1.length()<str2.length()?str1:str2;
        for (int i = 0; i <min.length(); i++) {
            for(int x=0,y=min.length()-i;y<min.length();y++,x++){
                str=str2.substring(x,y);
                if(max.indexOf(str)>0){
                    System.out.println(str);
                    return;
                }
            }
 
        }
    }

运行结果:hellob

二、StringBuffer类

StringBuffer类与String类用法相似,但是StringBuffer类具有可变性,并且在实例化对象时必须使用构造函数:

StringBuffer():初始容量为16的字符串缓冲区

StringBuffer(int size):构造指定容量的字符串缓冲区

StringBuffer(String str):将内容初始化为指定字符串内容

在StringBuffer类中有扩充了几个方法:


StringBuffer append(xxx):提供了很多的append()方法,用于进行字符串拼接

StringBuffer delete(int start,int end):删除指定位置的内容

StringBuffer replace(int start, int end, String str):把[start,end)位置替换为str

StringBuffer insert(int offset, xxx):在指定位置插入xxx

StringBuffer reverse() :把当前字符序列逆转

三、StringBuilder类

StringBuilder类与StringBuffer相似,均是可变的字符序列,其提供的方法几乎也是一样的

四、总结

String:不可变的字符序列

StringBuffer:可变字符序列,效率低,线程安全

StringBuilder:可变字符序列,效率高,线程不安全

注意:作为参数传递时,方法内部String类不会改变其值,StringBuffer和StringBuilder会改变!

目录
相关文章
|
26天前
|
算法 Java 数据处理
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。HashSet基于哈希表实现,提供高效的元素操作;TreeSet则通过红黑树实现元素的自然排序,适合需要有序访问的场景。本文通过示例代码详细介绍了两者的特性和应用场景。
36 6
|
18天前
|
存储 安全 Java
Java零基础-字符串详解
【10月更文挑战第18天】Java零基础教学篇,手把手实践教学!
95 60
|
14天前
|
存储 安全 Java
java.util的Collections类
Collections 类位于 java.util 包下,提供了许多有用的对象和方法,来简化java中集合的创建、处理和多线程管理。掌握此类将非常有助于提升开发效率和维护代码的简洁性,同时对于程序的稳定性和安全性有大有帮助。
37 17
|
8天前
|
缓存 算法 Java
本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制
在现代软件开发中,性能优化至关重要。本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制。通过调整垃圾回收器参数、优化堆大小与布局、使用对象池和缓存技术,开发者可显著提升应用性能和稳定性。
29 6
|
6天前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
10天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
50 4
|
11天前
|
Java 编译器 开发者
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
26 2
|
15天前
|
存储 安全 Java
如何保证 Java 类文件的安全性?
Java类文件的安全性可以通过多种方式保障,如使用数字签名验证类文件的完整性和来源,利用安全管理器和安全策略限制类文件的权限,以及通过加密技术保护类文件在传输过程中的安全。
|
19天前
|
Java 数据格式 索引
使用 Java 字节码工具检查类文件完整性的原理是什么
Java字节码工具通过解析和分析类文件的字节码,检查其结构和内容是否符合Java虚拟机规范,确保类文件的完整性和合法性,防止恶意代码或损坏的类文件影响程序运行。
|
19天前
|
Java API Maven
如何使用 Java 字节码工具检查类文件的完整性
本文介绍如何利用Java字节码工具来检测类文件的完整性和有效性,确保类文件未被篡改或损坏,适用于开发和维护阶段的代码质量控制。