java基础之字符串常见方法总结

时间:2021-01-19 23:59:33

        关于字符串的内容中大多都是一些需要记忆和练习的方法,在此文章中说一说常用的方法。

一. String类概述


1.创建一个String对象

        (1)以字面值的形式建立一个String对象:

        String s1 = “abc”;

        s1是一个String类型的变量,”abc”是一个对象,以字面值创建String类型的对象时,会先去字符串池中查找是否有abc这个字符串,如果有,s1就指向“abc“,如果没有就ch创建一个字符串abc加入到串池中 ,并把这个对象的地址赋给s1。

        (2)new一个String对象

        String s2 = new String(“abc”);

在堆内存中新建一个String对象,把地址赋给s2。

        此方法与第一种方法的不同之处在于s1只有一个对象就是”abc”这个字符串,第二种方法却有两个对象:new一个String对象和”abc”这个字符串。

注意点:当一个字符串被创建出来后时不可以改变

我们来通过代码看一看这两种方式:

class Test1 {
public static void main(String[] args) {
//利用字面值创建一个字符串
String s1 = "abc";
//利用new方法创建一个字符串
String s2 = new String("abc");

//s1指向字符串池中abc字符串,所以为真
System.out.println(s1=="abc");//true
//s2指向堆中对象为假
System.out.println(s2=="abc");//false
//s1指向abc字符串,s2指向堆中String对象所以为假
System.out.println(s1==s2);//false
//因为String类中复写了Object的equals方法,比较的内容,所以为真
System.out.println(s1.equals(s2));//true
}
}

二. String类常见操作


1.获取

        1>length()

        返回int类型,获取此字符串的长度

        2>charAt(int index)

        返回char类型,根据指定下标获取该位上的字符,如果输入的下标不存在,抛出字符串角标越界异常:StringIndexOutofBoundsException

        3>indexOf(int ch)

        返回int类型,根据字符获取其第一次出现的位置,注意此方法传入的int类型,是将字符转成数字后的值,如果要此字符不存在返回-1

        indexOf(int ch,int formIndex)

        返回int类型,从formIndex下标位置开始,获取到该字符在字符串中的第一次出现的位置

        indexOf(String str)

        返回int类型,返回字符串中子串第一次出现的下标

        indexOf(String str,int formIndex)

        返回int型,从指定位置开始获取子串出现的位置

        4>lastIndexOf(char ch)

        返回int类型,从字符串末尾开始查找,返回指定字符的位置,也就是返回这个字符串中此字符最后一次出现的位置

        5>获取子串

                a> substring(int beginIndex)
                返回String类型,为字符串的一个子串,从指定位置开始到字符串的结尾

                b>substring(int beginIndex,int endIndex)
                返回String类型,为字符串的一个子串,从指定位置开始到的指定位置结束的子串。

                注意点:截取的字符串包含beginIndex,不包含endIndex,比如一个字符串为“abcde”,调用substring(2,4),获取到的子串为“cd“,他是从beginIndex一直到endIndex-1这一段字符串。

2. 判断

返回类型都是boolean型的

        1>contains(CharSequence s)

        判断字符串中是否包含某一个子串,CharSequence是一个接口,它包含了char、String等类型,我们就把他看做一个子串就可以。

        我们也可以通过indexOf方法来判断,因为当子串或字符不存在时,该方法返回-1,如果我们既要拿到子串的位置又要判断子串是否存在,就用indexOf方法。

        2>isEmpty()

        判断字符串是否为空,原理就是判断字符串的长度是否为0。

        3>startsWith(string s)

        判断此字符串是否以指定内容开头

        4>endsWith(String s)

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

        5>equals(String str)

        判断字符串内容是否相同

        6>equalsIgnoreCase(String str)

        判断字符串内容是否相同,并忽略大小写

3.转换

        1>将字符数组转换成字符串

      第一种方式通过构造函数:

                a)new String(char[] ch)

                将字符数组作为参数传递到构造函数中

                b)new String(char[] ch,int offset,int count)

                将字符数组作为参数转换成字符串,offset是开始位,count是长度。

        第二种方式通过String类的静态方法将字符数组转换成字符串

                a)String.copyValueOf(char[]ch)

                b)String.copyValueOf(char[] ch,intoffset.int count)

         2> toCharArray()

        返回字符数组类型char[] ,将字符串转化为字符数组    

        3>getBytes()

        返回字节数组byte[] ,将字符串转为字节数组

        4>toUpperCase()

        返回String,将字符串中字母转成大写

        5>toLowerCase()

      返回String,将字符串中的字母转成小写

        6>替换方法

                a>replace(char oldchar,char newchar)

                返回String,将字符串中的特定字符oldchar转换为新的字符newchar,如果字符串中不含有oldchar字符,那么返回的是原来的字符串。

                b>replace( CharSequence target,CharSequence replacement)

                使用指定的字符串替换原字符串中的子串,charSequence是一个接口,我们把他理解成String类型的字符串就可以了。

        7>valueof(可以是基本数据类型,也可以是字符或者字符数组)

        返回String,valueof()可以把基本数值类型或者字符、字符数组转成字符串。此类方法是String类的静态方法。

        8>trim()

        返回String,此方法可以将字符串中的前端后尾部空格去掉,此方法多用来删除用户不小心输入的空格。

4.比较

        compareTo(String str)

        返回值为int类型,用来对两个字符串进行字典顺序(ACSII码表)的比较。

        如果字符串等于此字符串,返回0,注意只有当equals方法返回true时,此方法才返回0。

        如果字符串按字典顺序小于字符串参数,返回负整数。

        如果字符串按字典顺序大于字符串参数,返回正整数。

三. 字符串缓冲区——StringBuffer


StringBuffer我们可以把他看做一个容器,他可以接收不同类型的数据并将他们转换成字符串。

1.StringBuffer的特点

        ①他可以对字符串进行修改

        ②长度可变

        ③可以操作多种数据类型

        ④与String相似,拥有String类的大多数方法,可以通过toString()方法变成字符串。

2.StringBuffer的功能

(1)存储

        1>append(数据)

        Append()可以接收各种数据类型,除了byte和short,但是int可以替代两者,此类方法返回的还是本类对象,因为StringBuffer是可以被改变的,无需像String一样返回一个新的字符串。

        2>inset(int offset,数据)

        此方法依旧是在本类对象中修改,offset指定是在此位置插入后面的数据。

(2)删除

        1>delete(int start,int end)

        返回本类对象,删除从start到end-1位置上的字符(包头不包尾)。

        2>deleteCharAt(int index)

        返回本类对象,删除指定位置index上的字符。

(3)获取

        1>substring(int start,int end)

        返回的String类型,不是StringBuffer,依旧是截取从Strart到end-1这段字符串。

        2>chatAt(int index)

        返回字符类型,根据指定位置查找该位上的字符

        3>indexOf(String str)

        返回int类型,获取子串str在缓冲区中的起始位置

        4>lastIndexOf(String str)

        返回int类型,获取子串最后一次出现在缓冲区中的具体位置

(4)修改

        1>replace(int start,int end,String str)

        返回本类对象,将从start到end-1的这段字符串替换成str。

        2>setCharAt(int index,char ch)

        无返回值,将指定位置index上的元素替换为ch。

(5)反转

        reverse()

        返回本类对象,将缓冲区中的内容反转过来。

3. StringBuilder

        StringBuilder可以看做是StringBuffer的简易替换,他们的功能一样用法一样。区别在于StringBuffer是线程同步的,而StringBuilder是线程不同步的。所以当我们的程序中只有一个线程时我们使用StringBuilder,这样效率高。


四. 基本数据类型包装类与字符串的转换


1.基本数据类型包装类的简介

        我们知道基本数据类型有8种:byte、short、int、long、float、double、boolean、char。为了方便我们对这些基本数值类型进行操作,java把这8种基本数据类型分别封装成类。

        byte基本数值类型 对应Byte类,short对应Short,也就是基本数值类型首字母大写就是其包装类的名,但是有两个特殊的,int对应Integer,char对应Character。

        我们把基本数值类型转换为对象之后,我们就可以利用面向对象的方式来操作基本数据类型,例如我们可以获取一个int型数值的二进制表现形式,以前我们需要自己写方法来获取,现在我们在Integer中就已经定义好了此方法我们调用就可以了。

2.基本数据类型与字符串之间的转换

(1)基本数据类型转字符串

        1> 基本数据类型+””

        2>利用String类中的静态方法valueOf(基本数据类型值)

        3>利用基本数据类型包装类中的方法toString()来获取其字符串表现形式。

(2)字符串转基本数据类型

        1>在基本数据类型包装类中都有一个静态方法ParseXxx(String str)方法。比如Integer中有parseInt(String str)方法,这个方法返回值为int类型,Double中有parseDouble(String str)此方法返回值为double类型,也就是:

        Integer.parseXxx(“xxx类型的字符串”)

注意点是在Character中没有此方法,因为字符串本就是字符组成的,所以不需要。

        如果字符串被基本数据类型进行了对象的封装,那么我们可以用非静态的方法xxxvalue()来完成字符串转基本数据类型。例:

        Boolean bl= new Boolean("true");

        boolean x = bl.booleanValue();