String的介绍用法及StringBuffer,StringBuilder比较

简述

String是一个引用类型的表示字符序列的不可变类,它大小固定,一旦被赋值就无法被改变,属于java.long包下的常量,因为不可变,所以可以共享例如:

 String str = "abc";
 

等效于:

 

     char data[] = {'a', 'b', 'c'};
     String str = new String(data);
String s = new String(“hello”)和String s = “hello”;的区别?
 * 有。前者会创建2个对象,后者创建1个对象或0个对象(如果方法区的字符串常量池有的话就不用创建对象)。

所有已实现的接口:

Serializable,Charswquence,Comparable<String>

String 类包括的方法可用于检查序列的单个字符、比较字符串、搜索字符串、提取子字符串、创建字符串副本并将所有字符全部转换为大写或小写。大小写映射基于 Character 类指定的 Unicode 标准版。

Java 语言提供对字符串串联符号("+")以及将其他对象转换为字符串的特殊支持。字符串串联是通过 StringBuilder(或 StringBuffer)类及其 append 方法实现的。字符串转换是通过 toString方法实现的,该方法由 Object 类定义,并可被 Java 中的所有类继承。
构造方法除非另行说明,否则将 null 参数传递给此类中的构造方法或方法将抛出 NullPointerException。

String 表示一个 UTF-16 格式的字符串,其中的增补字符 由代理项对 表示(有关详细信息,请参阅 Character 类中的Unicode字符表示形式)。索引值是指 char 代码单元,因此增补字符在 String 中占用两个位置。

String 类提供处理 Unicode 代码点(即字符)和 Unicode 代码单元(即 char 值)的方法

构造方法

String():初始化一个新创建的 String 对象,使其表示一个空字符序列。

String(byte[] bytes) :通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String

String(byte[] bytes, Charsetcharset):使用指定的 charset解码指定的 byte 数组,构造一个新的 String

String(byte[] bytes, int offset, int length):使用平台的默认字符集解码指定的 byte 子数组,构造一个新的 String

String(byte[] bytes, int offset, int length, Charsetcharset):使用指定的 charset解码指定的 byte 子数组,构造一个新的 String

String(byte[] bytes, int offset, int length, String charsetName):使用指定的字符集解码指定的 byte 子数组,构造一个新的 String

String(byte[] bytes, StringcharsetName):使用指定的 charset解码指定的 byte 数组,构造一个新的 String

String(char[] value):分配一个新的 String,使其表示字符数组参数中当前包含的字符序列。

String(char[] value, int offset, int count): 分配一个新的 String,它包含取自字符数组参数一个子数组的字符

String(int[] codePoints, int offset, int count):分配一个新的 String,它包含 Unicode 代码点数组参数一个子数组的字符。

String(String original): 初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本。

String(StringBuffer buffer):分配一个新的字符串,它包含字符串缓冲区参数中当前包含的字符序列。

String(StringBuilder builder): 分配一个新的字符串,它包含字符串生成器参数中当前包含的字符序列。

public class demo01 {
    public static void main(String[] args) {
        //public String():空构造
        String str1 = new String();
        System.out.println("str1:"+str1);
        System.out.println("str1.length:"+str1.length());
        System.out.println("----------------------------");
        //public String(byte[] bytes):把字节数组转成字符串
        byte[] bys = {97,98,99,100,126};
        String str2 = new String(bys);
        System.out.println("str2:"+str2);
        System.out.println("str2.length:"+str2.length());
        System.out.println("----------------------------");
        //public String(byte[] bytes,int offset,int length):把字节数组的一部分转成字符串
        String str3 = new String(bys,2,3);
        System.out.println("str3:"+str3);
        System.out.println("str3.length:"+str3.length());
        System.out.println("----------------------------");
        //public String(char[] value):把字符数组转成字符串
        char[] c = {'a','b','c','爱','生','活'};
        String str4 = new String(c);
        System.out.println("str4:"+str4);
        System.out.println("str4.length:"+str4.length());
        System.out.println("----------------------------");
        //public String(char[] value,int offset,int count):把字符数组一部分转成字符串
        String str5 = new String(c,3,3);
        System.out.println("str5:"+str5);
        System.out.println("str5.length:"+str5.length());
        System.out.println("----------------------------");
        //public String(String original):把一个字符串常量转成字符串
        String str6 = new String("hello world");
        System.out.println("str6:"+str6);
        System.out.println("str6.length:"+str6.length());
        System.out.println("----------------------------");
        //字符串字面值"hello world"也可以看成是一个字符串对象。
        String s7 = "hello world";
        System.out.println("s7:"+s7);
        System.out.println("s7.length():"+s7.length());
    }
}

输出结果:

str1:

str1.length:0

----------------------------

str2:abcd~

str2.length:5

----------------------------

str3:cd~

str3.length:3

----------------------------

str4:abc爱生活

str4.length:6

----------------------------

str5:爱生活

str5.length:3

----------------------------

str6:hello world

str6.length:11

----------------------------

s7:hello world

s7.length():11

 

方法

 boolean equals(Object obj):比较字符串的内容是否相同,区分大小写       

 boolean equalsIgnoreCase(String str):比较字符串的内容是否相同,忽略大小写       

 boolean contains(String str):判断大字符串中是否包含小字符串       

boolean startsWith(String str):判断字符串是否以某个指定的字符串开头       

boolean endsWith(String str):判断字符串是否以某个指定的字符串结尾       

boolean isEmpty():判断字符串是否为空

 boolean matches(String regex):此字符串是否匹配给定的正则表达式。

 int length():获取字符串的长度

 char charAt(int index):获取指定索引位置的字符

 int indexOf(int ch):返回指定字符再次字符串中第一次出现处的索引

  为什么这里参数是int类型,而不是char类型?

  原因是:‘a’ 和 97 其实都可以代码‘a’。

int indexOf(String str):返回指定字符串再次字符串第一次出现处的索引

 int indexOf(int ch,int fromIndex):返回指定字符在此字符串中从指定位置后第一次出现处的索引

 int indexOf(String str,int fromIndex):返回指定字符串在此字符串中从指定位置后第一次出现处的索引

String substring(int start):从指定位置开始获取字符串,默认到末尾,包括start索引

String substring(int start,int end):从指定位置开始到指定位置结束获取字符串,包括start索引,不包括end索引

 byte[] getBytes():把字符串转换成字节数组       

char[] toCharArray():把字符串转换为字符数组       

static String valueOf(char[] chs):把字符数组转换成字符串

static String valueOf(int i):把int类型的数据转成字符串

注意:String类的valueOf方法可以把任意类型的数据转成字符串

String toLowerCase():把字符串转成小写          

String toUpperCase():把字符串转成大写         

String concat(String str):把字符串拼接

String replaceFirst(String regex, String replacement):使用给定的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。

String replaceAll(String regex,String replacement): 替换此字符串所有匹配给定的正则表达式的子字符串

·String replace(char old,char new) 旧串替换为新串

 String replace(String old,String new)旧串替换为新串

 int compareTo(String str)按字典顺序比较两个字符串 ,如果按字典顺序此 String 对象位于参数字符串之前,则比较结果为一个负整数。如果按字典顺序此 String 对象位于参数字符串之后,则比较结果为一个正整数。如果这两个字符串相等,则结果为 0;compareTo 只在方法 equals(Object) 返回 true 时才返回 0

int compareToIgnoreCase(String str) 按字典顺序比较两个字符串 ,忽略大小写 

trim()去除空格

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

例如,字符串 "boo:and:foo" 使用这些表达式可生成以下结果:

Regex 结果
: { "boo", "and", "foo" }
o { "b", "", ":and:f" }

 

String format(String format,Object... args):使用指定的格式字符串和参数返回一个格式化字符串

String   StringBuffer  StringBuilder区别

 

String:不可变字符序列,非线程安全,适用于少量的字符串操作的情况

StringBuilder:可变字符序列,非线程安全,适用於单线程下在字符缓冲区进行大量操作的情况

StringBuffer:可变字符序列,线程安全,适用多线程下在字符缓冲区进行大量操作的情况

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章