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会改变!

目录
相关文章
|
4月前
|
Java 编译器 API
Java 密封类:精细化控制继承关系
Java 密封类:精细化控制继承关系
340 83
|
2月前
|
SQL JSON Java
告别字符串拼接:用Java文本块优雅处理多行字符串
告别字符串拼接:用Java文本块优雅处理多行字符串
355 108
|
2月前
|
安全 Java 数据建模
Java记录类:简化数据载体的新选择
Java记录类:简化数据载体的新选择
232 101
|
2月前
|
安全 Java 开发者
Java记录类:简化数据载体的新方式
Java记录类:简化数据载体的新方式
285 100
|
3月前
|
安全 IDE Java
Java记录类型(Record):简化数据载体类
Java记录类型(Record):简化数据载体类
411 135
|
1月前
|
存储 Java 索引
用Java语言实现一个自定义的ArrayList类
自定义MyArrayList类模拟Java ArrayList核心功能,支持泛型、动态扩容(1.5倍)、增删改查及越界检查,底层用Object数组实现,适合学习动态数组原理。
86 4
|
1月前
|
IDE JavaScript Java
在Java 11中,如何处理被弃用的类或接口?
在Java 11中,如何处理被弃用的类或接口?
154 5
|
1月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
141 1
|
1月前
|
Java Go 开发工具
【Java】(8)正则表达式的使用与常用类分享
正则表达式定义了字符串的模式。正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。
202 1
|
1月前
|
存储 Java 程序员
【Java】(6)全方面带你了解Java里的日期与时间内容,介绍 Calendar、GregorianCalendar、Date类
java.util 包提供了 Date 类来封装当前的日期和时间。Date 类提供两个构造函数来实例化 Date 对象。第一个构造函数使用当前日期和时间来初始化对象。Date( )第二个构造函数接收一个参数,该参数是从1970年1月1日起的毫秒数。
144 1
下一篇
oss云网关配置