一、String类概述
(一)概述
String
类代表字符串。Java 程序中的所有字符串字面值,即以双引号括起来的变量(如"abc"
)都作为此类的实例实现。- 字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享。只要内容相同,相同的字符串,在内存中是一样的。例如:String str = "abc";等效于:char data[] = {'a', 'b', 'c'}; String str = new String(data);
- 字符串效果上相当于是char[]字符数组,但是底层原理是byte[]字节数组。
String
类包括的方法可用于检查序列的单个字符、比较字符串、搜索字符串、提取子字符串、创建字符串副本并将所有字符全部转换为大写或小写。大小写映射基于Character
类指定的 Unicode 标准版。- Java 语言提供对字符串串联符号("+")以及将其他对象转换为字符串的特殊支持。字符串串联是通过
StringBuilder
(或StringBuffer
)类及其append
方法实现的。字符串转换是通过toString
方法实现的,该方法由Object
类定义,并可被 Java 中的所有类继承。有关字符串串联和转换的更多信息,请参阅 Gosling、Joy 和 Steele 合著的 The Java Language Specification。 - 除非另行说明,否则将 null 参数传递给此类中的构造方法或方法将抛出
NullPointerException
。 String
表示一个 UTF-16 格式的字符串,其中的增补字符 由代理项对 表示(有关详细信息,请参阅Character
类中的 Unicode 字符表示形式)。索引值是指char
代码单元,因此增补字符在String
中占用两个位置。String
类提供处理 Unicode 代码点(即字符)和 Unicode 代码单元(即char
值)的方法。
(二)创建字符串的3+1种方式
1.三种构造方法
- public String(); 创建一个空白字符串,不含有任何内容。
- public String(char[] array);根据字符数组的内容,来创建对应的字符串。char[] charArray = { 'A','B','C' };String str = new String(charArray);
- public String(byte[] array);根据字节数组的内容,来创建对应的字符串。byte[] byteArray = { 'A','B','C' };String str = new String(byteArray);
2.一种直接创建
- String str = "Hello";
- 直接创建,也是字符串对象,编译器背后自动帮我们new了。
(三)字符串的常量池
- 引用类型,==进行的是地址值的比较。
- 双引号直接写的字符串在常量池中,new出来的字符串对象不在常量池中。常量池相同的字符串会有重复引用的情况。
二、常用方法
(一)构造器
String() 初始化一个新创建的 String 对象,使其表示一个空字符序列。 | |
String(byte[] bytes) 通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String 。 | |
String(byte[] bytes, Charset charset) 通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String 。 | |
String(byte[] ascii, int hibyte) 已过时。 该方法无法将字节正确地转换为字符。从 JDK 1.1 开始,完成该转换的首选方法是使用带有 Charset 、字符集名称,或使用平台默认字符集的 String 构造方法。 | |
String(byte[] bytes, int offset, int length) 通过使用平台的默认字符集解码指定的 byte 子数组,构造一个新的 String 。 | |
String(byte[] bytes, int offset, int length, Charset charset) 通过使用指定的 charset 解码指定的 byte 子数组,构造一个新的 String 。 | |
String(byte[] ascii, int hibyte, int offset, int count) 已过时。 该方法无法将字节正确地转换为字符。从 JDK 1.1 开始,完成该转换的首选方法是使用带有 Charset 、字符集名称,或使用平台默认字符集的 String 构造方法。 | |
String(byte[] bytes, int offset, int length, String charsetName) 通过使用指定的字符集解码指定的 byte 子数组,构造一个新的 String 。 | |
String(byte[] bytes, String charsetName) 通过使用指定的 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) 分配一个新的字符串,它包含字符串生成器参数中当前包含的字符序列。 |
(二)常用方法分类
1.字符串内容比较相关方法
- ==是地址比较,如果需要内容比较,则可以使用equals、equalsIgnoreCase。
- equals方法具有对称性,也就是a.equals(b)与b.equals(a)效果一样。推荐“abc”.equals(str);即将常量放在前面调用equals方法,因为变量放在前面,则str可能为null,出现NullPointerException异常。
- equalsIgnoreCase对比时忽略大小写,只有英文字母区分大小写,中文汉字的大小写无效。
2.字符串获取相关方法,String中与获取相关的方法有:
- public int length():获取长度。
- public String concat(String str):字符串拼接。拼接出的字符串是全新的一个字符串,被拼接的两个字符串都没有改变。
- public char charAt(int index):获取指定位置的字符。
- public int indexOf(String str):查找str在字符串中第一次出现的位置。找不到则返回-1.
3.字符串截取方法
- public String substring(int index):截取从参数位置一直到字符串末尾,范围新字符串。
- public String substring(int begin,int end):截取从begin开始,一直到end结束,中间的字符串。不包括end。
- 截取出来的字符串都是新字符串,原字符串没有变化。
4.字符串转换常用方法
- public char[] toCharArray():将当前字符串拆分成为字符数组作为返回值。
- public byte[] getBytes():获得当前字符串的底层字节数组
- public String replace(CharSequence oldString, CharSequence newString):将所有出现的老字符替换成为新的字符串,返回替换之后的结果新字符串。CharSequence是接口类型,可以接受字符串类型。
5.字符串常用分割方法
- public String[] split(String regex):按照参数规则,将字符串切分成若干部分。regex是一个正则表达式,比如array.split(".")是无法分割的,如果想按照英文句点"."进行切分,要写成array.split("\\")。
(三)String方法列举
char | charAt(int index) 返回指定索引处的 char 值。 |
int | codePointAt(int index) 返回指定索引处的字符(Unicode 代码点)。 |
int | codePointBefore(int index) 返回指定索引之前的字符(Unicode 代码点)。 |
int | codePointCount(int beginIndex, int endIndex) 返回此 String 的指定文本范围中的 Unicode 代码点数。 |
int | compareTo(String anotherString) 按字典顺序比较两个字符串。 |
int | compareToIgnoreCase(String str) 按字典顺序比较两个字符串,不考虑大小写。 |
String | concat(String str) 将指定字符串连接到此字符串的结尾。 |
boolean | contains(CharSequence s) 当且仅当此字符串包含指定的 char 值序列时,返回 true。 |
boolean | contentEquals(CharSequence cs) 将此字符串与指定的 CharSequence 比较。 |
boolean | contentEquals(StringBuffer sb) 将此字符串与指定的 StringBuffer 比较。 |
static String | copyValueOf(char[] data) 返回指定数组中表示该字符序列的 String。 |
static String | copyValueOf(char[] data, int offset, int count) 返回指定数组中表示该字符序列的 String。 |
boolean | endsWith(String suffix) 测试此字符串是否以指定的后缀结束。 |
boolean | equals(Object anObject) 将此字符串与指定的对象比较。 |
boolean | equalsIgnoreCase(String anotherString) 将此 String 与另一个 String 比较,不考虑大小写。 |
static String | format(Locale l, String format, Object... args) 使用指定的语言环境、格式字符串和参数返回一个格式化字符串。 |
static String | format(String format, Object... args) 使用指定的格式字符串和参数返回一个格式化字符串。 |
byte[] | getBytes() 使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。 |
byte[] | getBytes(Charset charset) 使用给定的 charset 将此 String 编码到 byte 序列,并将结果存储到新的 byte 数组。 |
void | getBytes(int srcBegin, int srcEnd, byte[] dst, int dstBegin) 已过时。 该方法无法将字符正确转换为字节。从 JDK 1.1 起,完成该转换的首选方法是通过 getBytes() 方法,该方法使用平台的默认字符集。 |
byte[] | getBytes(String charsetName) 使用指定的字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。 |
void | getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 将字符从此字符串复制到目标字符数组。 |
int | hashCode() 返回此字符串的哈希码。 |
int | indexOf(int ch) 返回指定字符在此字符串中第一次出现处的索引。 |
int | indexOf(int ch, int fromIndex) 返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索。 |
int | indexOf(String str) 返回指定子字符串在此字符串中第一次出现处的索引。 |
int | indexOf(String str, int fromIndex) 返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。 |
String | intern() 返回字符串对象的规范化表示形式。 |
boolean | isEmpty() 当且仅当 length() 为 0 时返回 true。 |
int | lastIndexOf(int ch) 返回指定字符在此字符串中最后一次出现处的索引。 |
int | lastIndexOf(int ch, int fromIndex) 返回指定字符在此字符串中最后一次出现处的索引,从指定的索引处开始进行反向搜索。 |
int | lastIndexOf(String str) 返回指定子字符串在此字符串中最右边出现处的索引。 |
int | lastIndexOf(String str, int fromIndex) 返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索。 |
int | length() 返回此字符串的长度。 |
boolean | matches(String regex) 告知此字符串是否匹配给定的正则表达式。 |
int | offsetByCodePoints(int index, int codePointOffset) 返回此 String 中从给定的 index 处偏移 codePointOffset 个代码点的索引。 |
boolean | regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len) 测试两个字符串区域是否相等。 |
boolean | regionMatches(int toffset, String other, int ooffset, int len) 测试两个字符串区域是否相等。 |
String | replace(char oldChar, char newChar) 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。 |
String | replace(CharSequence target, CharSequence replacement) 使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。 |
String | replaceAll(String regex, String replacement) 使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。 |
String | replaceFirst(String regex, String replacement) 使用给定的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。 |
String[] | split(String regex) 根据给定正则表达式的匹配拆分此字符串。 |
String[] | split(String regex, int limit) 根据匹配给定的正则表达式来拆分此字符串。 |
boolean | startsWith(String prefix) 测试此字符串是否以指定的前缀开始。 |
boolean | startsWith(String prefix, int toffset) 测试此字符串从指定索引开始的子字符串是否以指定前缀开始。 |
CharSequence | subSequence(int beginIndex, int endIndex) 返回一个新的字符序列,它是此序列的一个子序列。 |
String | substring(int beginIndex) 返回一个新的字符串,它是此字符串的一个子字符串。 |
String | substring(int beginIndex, int endIndex) 返回一个新字符串,它是此字符串的一个子字符串。 |
char[] | toCharArray() 将此字符串转换为一个新的字符数组。 |
String | toLowerCase() 使用默认语言环境的规则将此 String 中的所有字符都转换为小写。 |
String | toLowerCase(Locale locale) 使用给定 Locale 的规则将此 String 中的所有字符都转换为小写。 |
String | toString() 返回此对象本身(它已经是一个字符串!)。 |
String | toUpperCase() 使用默认语言环境的规则将此 String 中的所有字符都转换为大写。 |
String | toUpperCase(Locale locale) 使用给定 Locale 的规则将此 String 中的所有字符都转换为大写。 |
String | trim() 返回字符串的副本,忽略前导空白和尾部空白。 |
static String | valueOf(boolean b) 返回 boolean 参数的字符串表示形式。 |
static String | valueOf(char c) 返回 char 参数的字符串表示形式。 |
static String | valueOf(char[] data) 返回 char 数组参数的字符串表示形式。 |
static String | valueOf(char[] data, int offset, int count) 返回 char 数组参数的特定子数组的字符串表示形式。 |
static String | valueOf(double d) 返回 double 参数的字符串表示形式。 |
static String | valueOf(float f) 返回 float 参数的字符串表示形式。 |
static String | valueOf(int i) 返回 int 参数的字符串表示形式。 |
static String | valueOf(long l) 返回 long 参数的字符串表示形式。 |
static String | valueOf(Object obj) 返回 Object 参数的字符串表示形式。 |