Loading...
墨滴

HB

2021/11/27  阅读:36  主题:绿意

String知识补充

String 补充

Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串

在之前的文章《String、StringBuffer 与 StringBuilder 全总结》中,已经比较详细地介绍过String、StringBuffer、StringBuilder 三个类之间的关系及其相对应的方法,本文再对此三个类不常用的方法做一些补充
夕阳映照
夕阳映照

String 方法

1、s1.compareTo(Object o) 把这个字符串和另一个对象比较

返回值是整型,先比较对应字符的大小(ASCII码顺序),如果第一个字符和参数的第一个字符不等,结束比较,返回他们之间的长度差值,如果第一个字符和参数的第一个字符相等,则以第二个字符和参数的第二个字符做比较,以此类推,直至比较的字符或被比较的字符有一方结束。

  • 如果参数字符串等于此字符串,则返回值 0;
  • 如果此字符串小于字符串参数,则返回一个小于 0 的值;
  • 如果此字符串大于字符串参数,则返回一个大于 0 的值。

2、s1.compareToIgnoreCase(String str) 用于按字典顺序比较两个字符串,不考虑大小写

  • 如果参数字符串等于此字符串,则返回值 0;

  • 如果此字符串小于字符串参数,则返回一个小于 0 的值;

  • 如果此字符串大于字符串参数,则返回一个大于 0 的值。

  • Example 1
public class StringTest1 {

    @Test
    public void test1(){
        String s1 = "Strings";
        String s2 = "Strings";
        String s3 = "Strings123";

        System.out.println(s1.compareTo(s2));  // 输出 0
        System.out.println(s2.compareTo(s3));  // 输出 -3
        System.out.println(s3.compareTo(s1));  // 输出 3
    }

    @Test
    public void test2(){
        String s1 = "STRINGS";
        String s2 = "Strings";
        String s3 = "Strings123";

        System.out.println(s1.compareToIgnoreCase(s2));  // 输出 0
        System.out.println(s2.compareToIgnoreCase(s3));  // 输出 -3
        System.out.println(s3.compareToIgnoreCase(s1));  // 输出 3
    }
}

3、s1.contentEquals() 方法用于将此字符串与指定的StringBuffer比较

  • 如果字符串与指定 StringBuffer 标识相同的字符序列,则返回 true;否则返回false;

4、s1.subSequence(int beginIndex, int endIndex) 返回一个新的字符序列,它是此序列的一个子序列

5、String[] split(String regex, int limit) 根据匹配给定的正则表达式来拆分此字符串

6、s1.replaceAll(String regex, String replacement) 使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串

  • regex 匹配此字符串的正则表达式;replacement 用来替换每个匹配项的字符串;成功则返回替换的字符串,失败则返回原始字符串

7、s1.hashCode() 返回此字符串的哈希码

  • 字符串对象的哈希码根据以下公式计算:s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]。使用 int 算法,这里 s[i] 是字符串的第 i 个字符的 ASCII 码,n 是字符串的长度,^ 表示求幂。空字符串的哈希值为 0。
  • Example 2
public class StringTest2 {

    @Test
    public void test3(){
        String s1 = "StringTest2";
        StringBuffer sb1 = new StringBuffer("StringTest2");
        StringBuffer sb2 = new StringBuffer("STRINGTest2");
        boolean equals1 = s1.contentEquals(sb1);
        boolean equals2 = s1.contentEquals(sb2);
        System.out.println(equals1);  // 输出 true
        System.out.println(equals2);  // 输出 false
    }
    
    @Test
    public void test4(){
        String s1 = "StringTest2";
        CharSequence charSequence = s1.subSequence(26);
        System.out.println(charSequence);  // 输出 ring
    }
    
    @Test
    public void test6(){
        String s1 = new String("www.google.com");
        System.out.print("匹配成功返回值 :" );  // 输出 runoob
        System.out.println(s1.replaceAll("(.*)google(.*)""runoob" ));
        System.out.print("匹配失败返回值 :" );  // 输出 www.google.com
        System.out.println(s1.replaceAll("(.*)taobao(.*)""runoob" ));
    }

    @Test
    public void test7(){
        String s1 = new String("www.google.com");
        System.out.println(s1.hashCode());  // 输出 -702889725
    }
    
}

StringBuffer 的其他方法

1、sb.capacity() 返回当前容量

2、sb.charAt(int index) 返回此序列中指定索引处的 char

3、sb.ensureCapacity(int minimumCapacity) 确保容量至少等于指定的最小值

4、sb.getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 将字符从此序列复制到目标字符数组 dst

5、sb.indexOf(String str, int fromIndex) 从指定索引处开始,返回第一次出现的指定子字符串在该字符串中的索引

6、sb.lastIndexOf(String str, int fromIndex) 返回指定子字符串最后一次出现的字符串中的索引,从指定索引开始向后搜索

7、sb.setCharAt(int index, char ch) 将给定索引处的字符设置为 ch

8、sb.setLength(int newLength) 设置字符序列的长度

9、sb.subSequence(int start, int end) 返回一个新的字符序列,该字符序列是此字符序列的子序列

10、sb.subString(int start, int end) 返回一个新的 String,包含此序列当前所包含的字符子序列

11、sb.toString() 返回系序列中数据的字符串表示形式

  • Example 1
public class StringBufferMethodsTest1 {

    @Test
    public void Test1() {
        StringBuffer sb1 = new StringBuffer();
        StringBuffer sb2 = new StringBuffer("String");
        System.out.println(sb1.capacity());  // 输出 16,因为StringBuffer初始容量为16个字符
        System.out.println(sb2.capacity());  // 输出 22,初始容量加上现有字符串的容量
    }

    @Test
    public void Test2() {
        StringBuffer sb1 = new StringBuffer("String");
        System.out.println(sb1.charAt(3));  // 输出 i
    }

    /**
     * 语法:public void ensureCapacity(int minimumCapacity)
     * 释义:StringBuffer类的ensureCapacity()方法可确保容量至少等于指定的minimumCapacity。
     * - 如果minimumCapacity参数 > 旧容量的两倍加2,则新容量等于minimumCapacity,否则新容量等于旧容量的两倍加2
     * 例子:sb1 的容量是 22,两倍加2是46,如果minimumCapacity参数 > 旧容量的两倍加2,则新容量为minimumCapacity,如果minimumCapacity参数 <= 旧容量的两倍加2,则新容量为于旧容量的两倍加2
     */

    @Test
    public void Test3() {
        StringBuffer sb1 = new StringBuffer("String");  // sb1 的 capacity 是22,两倍加2是46
        StringBuffer sb2 = new StringBuffer("String");  // sb2 的 capacity 是22,两倍加2是46
        sb1.ensureCapacity(40);
        sb2.ensureCapacity(48);
        System.out.println(sb1.capacity());  // 输出 46
        System.out.println(sb2.capacity());  // 输出 48
    }

    @Test
    public void Test4() {
        StringBuffer sb1 = new StringBuffer("I love family, I love my country!");
        char[] chars = new char[sb1.length()];
        sb1.getChars(215, chars, 5);
        System.out.println(chars);  // 输出 love family,
    }
    
}
  • Example 2
public class StringBufferMethodsTest2 {

    @Test
    public void Test1() {
        StringBuffer sb1 = new StringBuffer("String, StringBuilder, StringBuffer");
        int index = sb1.indexOf("ing"7);
        System.out.println(index);  // 输出 11
    }

    @Test
    public void Test2() {
        StringBuffer sb1 = new StringBuffer("StringStringBuilder");
        int index = sb1.lastIndexOf("ng"6);
        System.out.println(index);  // 输出 4
    }

    @Test
    public void Test3() {
        StringBuffer sb1 = new StringBuffer("String");
        StringBuffer sb2 = new StringBuffer("String");
        sb1.setCharAt(3'u');
        sb2.setLength(10);  // 设置字符序列的长度
        System.out.println(sb1);  // 输出 Strung
        System.out.println(sb2.length());  // 输出 10,即将 sb2 长度设置为10
    }

    @Test
    public void Test4() {
        StringBuffer sb1 = new StringBuffer("I love family, I love my country!");
        CharSequence subSequence = sb1.subSequence(415);
        System.out.println(subSequence);  // 输出 ve family,
    }
    
}

StringBuilder 是一个可变的字符序列,提供与 StringBuffer 兼容的 API,但是不保证同步,使用方法类似,用于单个线程使用字符缓冲区的位置,速度比 StringBuffer 要快。

HB

2021/11/27  阅读:36  主题:绿意

作者介绍

HB