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
类包括的方法可用于检查序列的单个字符、比较字符串、搜索字符串、提取子字符串、创建字符串副本并将所有字符全部转换为大写或小写。大小写映射基于 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:不可变字符序列,非线程安全,适用于少量的字符串操作的情况
StringBuilder:可变字符序列,非线程安全,适用于单线程下在字符缓冲区进行大量操作的情况
StringBuffer:可变字符序列,线程安全,适用多线程下在字符缓冲区进行大量操作的情况