Java字符串类详解

目录

一、String类

二、StringBuffer类

三、StringBuilder类

四、总结


在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

 运行结果为:

 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

运行结果: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()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会改变!

你可能感兴趣的:(java,开发语言,jvm)