不变的String类

Posted tunan-ki

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了不变的String类相关的知识,希望对你有一定的参考价值。

String类的初始化

在操作String类之前,首先需要对String类进行初始化,在Java中可以通过以下两种方式对String类进行初始化,具体如下:

1. 使用字符串常量直接初始化一个String对象,具体代码如下。

        String str1 = "abc";

2. 使用String的构造方法初始化字符串对象,String类的构造方法如下

     String() - 使用无参构造方式构造对象
     String(byte[] bytes)  - 根据参数指定的byte数组来构造对象
     String(byte[] bytes, int offset, int length)  - 使用参数数组中的一部分来构造对象
     String(String original)  - 根据参数指定的字符串内容来构造对象
     String(StringBuffer buffer)  - 根据参数指定的引用来构造对象
     String(StringBuilder builder)   - 根据参数指定的引用来构造对象

接下来通过一个案例来学习String类的使用

public class Example01 {
    public static void main(String[] args) {
        //创建一个空的字符串
        String str1 = new String();
        //创建一个内容为abcd的字符串
        String str2 = new String("abdc");
        //创建一个内容为字符数组的字符串
        char[] charArray = new char[] {‘D‘,‘E‘,‘F‘};
        String str3 = new String(charArray);
        System.out.println("a"+str1+"b");
        System.out.println(str2);
        System.out.println(str3);
    }
}

String类的常见操作

char charAt(int index)       - 用于返回参数指定下标位置的字符
     
int length()    - 用于返回当前字符集的长度

int compareTo(String anotherString)
    - 用于比较调用对象和参数对象的字符串大小关系并返回。
    - 使用当前字符串中第一个字符起的每一个字符减去参数字符串中对象位置的字符
    - 若第一个字符不相等则可以代表字符大小的关系,若相等则使用下一个字符继续比较
    - 若存在的字符都相等,则大小取决于长度

int compareTognoreCase(String str)
    - 不考虑大小写,也就是"A"和"a"在该方法中认为是相等的关系

boolean equals(Object anObject)
    - 用于比较字符串内容是否相等并返回

boolean equalsTognoreCase(String anotherString)
    - 用于比较字符串内容是否相等并返回,不考虑大小写,如"A"和"a"

boolean contains(CharSequence s)    
    - 用于判断调用对象中是否包含参数指定的内容
    - 其中参数是接口类型,因此实参传递有两种方式:        
    a. 创建实现类的对象作为实参传递,而String类就是该接口的实现类
    b. 使用匿名内部类创建接口类型的对象作为实参传递

boolean endsWith(String suffix)        - 用于判断当前字符串是否以参数指定的内容为结尾

boolean startsWith(String prefix)        - 用于判断当前字符串是否以参数指定的内容为开头

String toLowerCase()   - 用于将当前字符串中的所有字符转换为小写并返回

String toUpperCase()    - 用于将当前字符串中的所有字符转换为大写并返回

String trim()    - 用于去除当前字符串中两端的空白字符并返回

byte[] getBytes()    - 用于将当前字符串内容转为byte数组并返回

char[] toCharArray()    - 用于将当前字符串内容转为char数组并返回

int indexOf(int ch)        - 用于返回当前字符串中参数 ch指定的字符第一次出现的下标

int indexOf(int ch, int fromIndex)        - 用于从fromIndex位置开始查询ch指定的字符,若查找失败,则返回 -1

int indexOf(String str)        - 用于查找参数str指定的字符串并返回下标

int indexOf(String str, int fromIndex)        - 用于从fromIndex位置开始查找

int lastIndexOf(int ch)        - 用于返回当前字符串中参数 ch指定的字符最后一次出现的下标 

int lastIndexOf(int ch, int fromIndex)        - 用于从fromIndex位置开始查询ch指定的字符出现的下标,反向搜索的第一个,若查找失败,则返回 -1

int lastIndexOf(String str)        - 用于返回str指定的字符串最后一次出现的下标

int lastIndexOf(String str, int fromIndex)- 用于从fromIndex位置开始反向查找

String substring(int beginIndex)    - 用于获取当前字符串中从beginIndex位置开始的子字符串并返回

String substring(int beginIndex, int endIndex)        - 用于获取字符串中从beginIndex位置开始到endIndex结尾的子字符串并返回

1. 字符串的基本操作
在程序中,需要对一些字符串进行一些基本操作,如获取字符串长度、获取指定位置的字符等。String类针对每一个操作都一红了对应的方法,接下来通过一个案例来学习这些方法的使用

    public class Example02 {
        public static void main(String[] args) {
            String s = "ancdefghijk";    //声明字符串
            System.out.println("字符串的长度是:"+s.length());    //获取字符串长度
            System.out.println("字符串中第一个字符:"+s.charAt(0));
            System.out.println("字符c第一次出现的位置:"+s.indexOf("c"));
            System.out.println("字符c最后出现的位置:"+s.lastIndexOf("c"));
            System.out.println("子字符串第一次出现的位置:"+s.indexOf("cd"));
            System.out.println("子字符串最后一次出现的位置:"+s.lastIndexOf("cd"));
        }
    }

2. 字符串的转换操作
程序开发中,经常需要对字符串进行转换操作,例如将字符串转换成数组的形式,将字符串中的字符进行大小写转换等。接下来通过一个案例来演示字符串的转换操作

public class Example03 {
    
        public static void main(String[] args) {
            String str = "abcd";
            System.out.print("字符串转为字符数组后的结果是:");
            char[] charArray = str.toCharArray();    //字符串转换为字符数组
            for (int i = 0; i < charArray.length; i++) {
                if(i != charArray.length-1) {
                    //如果不是数组的最后一个字符,在元素后面加逗号
                    System.out.print(charArray[i]+",");
                }else {
                    //如果是数组的最后一个字符,不追加逗号
                    System.out.println(charArray[i]);
                }
            }
            //int值转换为String类型的值
            System.out.println("将int值转换为String类型之后的结果:"+String.valueOf(12));
            
            //将字符串转换为大写
            System.out.println("将字符串转换为大写之后的结果是:"+str.toUpperCase());
        }
    }

3. 字符串的替换和去除空格操作
程序开发中,用户输入数据时经常会有一些错误和空格,这时可以使用String类的replace()和trim()方法,进行字符串的替换和去除空格操作。接下来通过一个案例来学习这两个方法的使用

public class Example04 {
        public static void main(String[] args) {
            String s = "itcast";
            //字符串替换操作
            System.out.println("将it替换成cn.it的结果:"+s.replace("it", "cn.it"));
            //字符串去除空格操作
            String s1 = "  i t c a s t  ";
            System.out.println("去除字符串两端的空格后的结果:"+s1.trim());
            //去除字符串中所有的空格
            System.out.println("去除了字符串中所有空格的结果:"+s1.replace(" ", ""));
        }
    }

4. 字符串的判断操作
操作字符串时,经常需要对字符串进行一些判断,如判断字符串是否以指定的字符串开始、结束,是否包含指定的字符串,字符串是否为空等。在String类中针对字符串的判断操作提供了很多方法,接下来通过一个案例来学习这些判断方法的使用

    public class Example05 {
        public static void main(String[] args) {
            String s1 = "String";
            String s2 = "";
            //判断开头
            System.out.println(s1.startsWith("St"));
            //判断结尾
            System.out.println(s1.endsWith("ng"));
            //判断是否包含
            System.out.println(s1.contains("ri"));
            //判断字符串是否为空
            System.out.println(s1.isEmpty());
            //判断两个字符串是否相等
            System.out.println(s1.equals(s2));
        }
    }

在程序中可以通过 == 和 equals() 两种方式对字符串进行比较,但这两种方式有明显的区别。equals()方法用于比较两个字符串中的字符是否相等,== 方法用于比较两个字符串对象的地址是否相等。对于两个字符串对象,当它们的字符内容完全相同时,使用equals判断结果为true,但使用 == 判断时,结果一定为false。为了便于理解,下面给出示例

    public class Example06 {
        public static void main(String[] args) {
            String str1 = new String("abcd");
            String str2 = new String("abcd");
            //使用==判断两个字符串是否相等
            System.out.println(str1 == str2);
            //使用equals判断两个字符串是否相等
            System.out.println(str1.equals(str2));
        }
    }

5. 字符串的截取和分隔
在String类中针对字符串的截取和分隔操作提供了两个方法。其中,substring()方法用于截取字符串的一部分,split()方法可以将字符串按照某个字符进行分割。接下来通过一个案例来学习这两个方法的使用

    public class Example07 {
        public static void main(String[] args) {
            String str = "羽毛球-篮球-乒乓球";
            //字符串的截取操作
            System.out.println("从第5个字符截取到末尾的结果:"+str.substring(4));
            System.out.println("从第5个字符截取到第6个字符的结果:"+str.substring(4, 6));
            //字符串的分隔操作
            System.out.print("分割后的字符串数组中的元素依次为:");
            String[] strArray = str.split("-");        //将字符串切分后返回数组
            for (int i = 0; i < strArray.length; i++) {
                if(i != strArray.length-1) {
                    System.out.print(strArray[i]+","); //不是最后一个数在每一个字符后加逗号
                }else {
                    System.out.println(strArray[i]);   //数组最后一个元素不加逗号
                }
            }
        }
    }

注 意:

String字符串在获取某个字符时,会用到字符的索引,当访问字符串中的字符时,如果字符的索引不存在,则会发生StringIndexOutOfBoundsException(字符串脚标越界异常)

 

以上是关于不变的String类的主要内容,如果未能解决你的问题,请参考以下文章

片段中的Firebase数据不是持久的,会重新下载

CSP核心代码片段记录

Android状态栏颜色不变

类String

如何通过单击片段内的线性布局从片段类开始新活动?下面是我的代码,但这不起作用

类String