String

# Java 字符串详解

字符串广泛应用 在 Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。

创建增删

创建字符串最简单的方式如下:

String greeting = "Greeting";

和其它对象一样,可以使用关键字和构造方法来创建 String 对象。String 类有 11 种构造方法,这些方法提供不同的参数来初始化字符串,比如提供一个字符数组参数:

public class StringDemo{
   public static void main(String args[]){
      char[] helloArray = { 'r', 'u', 'n', 'o', 'o', 'b'};
      String helloString = new String(helloArray);
      System.out.println( helloString );
   }
}

注意,String 类是不可改变的,所以你一旦创建了 String 对象,那它的值就无法改变了。

字符串转义

点的转义:. ==> u002E
美元符号的转义:\$ ==> u0024
乘方符号的转义:^ ==> u005E
左大括号的转义:{ ==> u007B
左方括号的转义:[ ==> u005B
左圆括号的转义:( ==> u0028
竖线的转义:| ==> u007C
右圆括号的转义:) ==> u0029
星号的转义:\* ==> u002A
加号的转义:+ ==> u002B
问号的转义:? ==> u003F
反斜杠的转义: ==> u005C

譬如我们如果需要从 System.in 中输入 "C:\",在 Java 中的字符串表示的是: "C:\\",而如果要用正则表达式匹配 "\" 这个字符的时候,正则表达式要写成 "\\\\",即首先是根据 Java 语言本身的转义字符,转化为普通字符中的 "\\",其就等价于正则表达式中匹配 "\" 这个字符。

模板字符串

String.format("%s 今年%d 岁","我", "24");
MessageFormat.format("{0}  今年{1} 岁", "我",24);

索引遍历

Split | 截取分割

split 方法的结果是一个字符串数组,在 stingObj 中每个出现 separator 的位置都要进行分解:

stringObj.split([separator[limit]])

// 根据转义字符进行分割
String.split("\\.")
String.split("\\|")

// 使用正则表达式

字符串操作

子字符串

substring(beginIndex,endIndex),即截取的是 [beginIndex,endIndex-1] 这样的字符串。

System.out.println("abcd".substring(0,1));

Compare | 字符串比较

不可变性

字符串实际上就是一个 char 数组,并且内部就是封装了一个 char 数组。并且这里 char 数组是被 final 修饰的:

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    /** The value is used for character storage. */
    private final char value[];

并且 String 中的所有的方法,都是对于 char 数组的改变,只要是对它的改变,方法内部都是返回一个新的 String 实例。

intern

String.intern() 方法可以用来处理在 Java 中字符串的重复问题,通过使用 intern() 方法,可以节省大量由重复字符串对象消耗的堆内存。如果一个字符串对象包含与另一个字符串相同的内容,但是占用了不同的内存位置,例如 str1 != str2str1.equals(str2) true,则称其为重复。由于 String 对象在普通 Java 应用程序中消耗大量堆内存,因此使用 intern() 方法减少重复,也可以使用 intern() 方法实例化 String 对象并将它们存储到 String pool 中以便进一步重用。

通过在此对象上调用 intern() 方法,可以指示 JVM 将此放入 String pool 中,并且每当其他人创建 abc 时,将返回此对象而不是创建新对象。

public class Test {
    public static void main(String[] args) {
        String s1 = "Test";
        String s2 = s1.intern();
        String s3 = new String("Test");
        String s4 = s3.intern();
        System.out.println(s1==s2); // True
        System.out.println(s1==s3); // False
        System.out.println(s1==s4); // True
        System.out.println(s2==s3); // False
        System.out.println(s2==s4); // True
        System.out.println(s3==s4); // False
    }
}

Links

下一页