String、StringBuilder、StringBuffer类使用笔记

String类与char数组的区别

  • String类: 数据 + 相关操作(char[] + 操作方法)

  • char[]:只是数据,没有相关操作

首先引入几个名词:
字面量:字符串的“字面量”(也叫“直接量”),也是String类型,它表示了String类型里面的具体内容。

字符串静态常量:需要使用关键字static、final进行修饰

例如:static final String NAME = “张三”;NAME属于常量 而NAME的值“张三”就是NAME的字面量。
其实String底层的实现就是一个char[]

String类能不能被继承?

首先复习一下final关键字:

    被fianl修饰变量称之为常量,常量不能被修改
    final修饰方法,该方法被它所在的类的子类重写
    final修饰的类,称之为“终极类”,不能被继承,換而言之它不能有子类。

而String正是被final关键字所修饰的类(查看java源代码可知)。不能被继承,也不能有子类。

String的一个原则:对象内容永远不变(堆内存中)**

使用String类型可以和基本类型基本一致。

String字面量相同时,会被替换成一个对象的引用。

验证案例:

     String str1 = "土豪我们做朋友吧";
     String str2 = "土豪我们做朋友吧";
     System.out.println(str1==str2);
     输出为true


    String str3 = new String("土豪我们做朋友吧");
    System.out.println(str1==str3);
    输出false

注:new String(…)会在堆内存中强制开辟新的空间

String内容比较使用 equals()方法

    System.out.println(str1.equals(str2));
    System.out.println(str1.equals(str3));
    输出均为true

String API常用方法

String类覆写了toString、hashCode、equals等方法
String字符串中的字符是有序号的,从0开始。

API方法:
       char      charAt( int index):返回索引处char的值。
        int             length():                  返回字符串的长度。
       String          trim():                    返回字符串的副本,忽略前导空白和尾部空白。
       String          toLowerCase():       将String字符中所有字符都转换为小写。
       String          toUpperCase():       将String字符中所有字符都转换为大写。
        int       indexOf( int ch):            返回指定字符在此字符串第一次出现的索引。
        int       indexOf( int ch , int fromIndex):     返回指定字符在此字符串第一次出现指定字符串处的索引,
                                                                          从指定索引处(当前位置)开始搜索。
        int               lastIndexOf( int ch):             返回指定字符在字符串中最后一次出现处的索引。
       boolean       endsWith(String suffix):        测试此字符串是否以指定的后缀结束。
       boolean       startsWith(String prefix):      测试此字符串是否以指定的后缀开始.
       String          substring( int beginIndex):    返回一个新字符串,它是此字符串的一个子字符串。
       String          substring( int beginIndex , int endIndex):返回一个新字符串,它是此字符串的一个子字符串。
       char[]          toCharArray():       将此字符串转换为一个新的字符数组。
       String[]        split():                   根据指定的正则表达式拆分此数组。

凡是字面量和常量、字面量和字面量的运算,都会先在编译期运算出结果

运行期:当字符串池中已经有了String的“字面量”时,java程序会直接使用,如果没有则创建。

正则表达式

字符集

       [1234]     表示1,2,3,4其中之一
       [^12]      表示除了1,2之外的
       [1-8]       表示1~8之间的一个数字
       [a-e]       表示a,b,c,d,e其中之一
       [A-Z]      表示A-Z之间的一个大写字母
       [a-zA-Z]  表示一个大写或小写的字母
       [0-9a-fA-F]    表示一个16进制字符
       0[xX][0-9a-fA-F]{1,8}表示整数的16进制的表达式

预定义字符集

       \d         表示[0-9]
       \D         表示非数字(不常用)
       .            表示任意字符
       \w         表示单词字符[0-9a-zA-Z_]  PS:包含下划线
       \W        表示非单词字符
       \s          表示空白: \t \n \r
       \S         表示非空白
       {m,n}    表示数词m到n个(n>m>=0)
       {n}        表示数词n个
       {n,}       表示n个以上
        ?         表示能出现0次或1次
        *         表示能出现0或多次 {0,}
        +         表示能出现1或多次 {1,}

正则表达式以”^”开头,以“$”结尾

常用的正则表达式:

       邮政编码:    ^[0-9]{6}$ 或 ^\d{6}$      0-9的任意数字出现6次
       用户名:       ^\w{6,12}$                      6-12位的单词字符
       手机号码:    ^(\+86|0086)?\s?\d{11}$         "+"特殊字符需要对之转义
       身份证号:    ^\d{15}(\d{2}[0-9]xX)?$
       日期:          ^\d{4}-\d{2}-\d{2}$         yyyy-MM- dd     2015-01-29
                           或 ^\d{4}(-\d{2}){2}$
       IP地址:       ^\d{1,3}\.(\d{1.3}){3}$ 或 ^(\d{1,3}\.){3}\d{1,3}$
       邮箱             ^\w{6,12}@(\w)+(\.(\w)+)*$
                           ^\w{6,12}@(\w)+(\.(\w)+)*(\. com|\. cn|\.net)+$

String字符串对正则表达式的支持

boolean    matches(String regex)      匹配正则表达式
String[]     split(String regex)             根据正则表达式拆分
String        replaceAll(String regex,String replacement)
                                           使用给定的replacement替换此字符串所有匹配给定正则表达式的子字符串

StringBuilderh和StringBuffer

 String              =    char[] + 操作(复制创建新对象)              char[]内容不可变
 StringBuilder   =    char[] + 操作(处理当前数组中的内容) char[]内容可变
 StringBuffer    =    char[] + 操作(处理当前数组中的内容) char[]内容可变

StringBulider:

常用方法:

       append()        表示“追加”内容,该方法反复操作结果只有一个对象。
       insert()           表示在指定的位置“插入”指定的内容。
       delete()          表示删除多个字符。
       deletCharAt() 表示删除单个字符。
  1. 长度可变的
  2. CRUD操作的方法都返回当前的StringBulider对象本身
  3. String str = s1 + s2; java 代码如下执行
    String str = new StringBulider(s1).append(s2).toString();
  4. s += “b”; 会产生两个对象

StringBulider和StringBuffer的区别:

       StringBuffer 在java早期的版本(JDK1.0),速度稍慢,线程安全。
       StringBulider在java5(JDK1.5)以后提供,计算速度较快,非线程安全。

猜你喜欢

转载自blog.csdn.net/jsong1025/article/details/44917643