JavaSE---05String与包装类
1 String
字符串即字符的组合,在Java中,字符串是一个类,所以我们见到的字符串都是对象;这些字符的组合通过双引号包裹
" "
1.1 String的特点
- String 被修饰为final,所以是不能被继承的
- String是不可变的字符序列
- 底层通过char[] 存储
1.2 String的格式化输出
%s 表示字符串
%d 表示数字
%n 表示换行
\r 表示回车
在不同的操作系统,换行符是不一样的
(1)在DOS和Windows中,每行结尾是 “\r\n”;
(2)Linux系统里,每行结尾只有 “\n”;
(3)Mac系统里,每行结尾是只有 “\r”。
//使用格式化输出
//%s表示字符串,%d表示数字,%n表示换行
System.out.printf("%s 花了 %d 钱,买了一瓶 %s %n","张三",8, "小鸟伏特加" );
//使用printf格式化输出
System.out.printf(sentenceFormat,name,kill,title);
//使用format格式化输出,printf()就是调用format()
System.out.format(sentenceFormat,name,kill,title);
int year = 2020;
//总长度,左对齐,补0,千位分隔符,小数点位数,本地化表达
//直接打印数字
System.out.format("%d%n",year);
//总长度是8,默认右对齐
System.out.format("%8d%n",year);
//总长度是8,左对齐
System.out.format("%-8d%n",year);
//总长度是8,不够补0
System.out.format("%08d%n",year);
//千位分隔符
System.out.format("%,8d%n",year*10000);
//小数点位数
System.out.format("%.2f%n",Math.PI);
//不同国家的千位分隔符
System.out.format(Locale.FRANCE,"%,.2f%n",Math.PI*10000);
System.out.format(Locale.US,"%,.2f%n",Math.PI*10000);
System.out.format(Locale.UK,"%,.2f%n",Math.PI*10000);
1.3 String的相关API
方法 | 方法描述 |
---|---|
char charAt(int index) | 返回指定索引处的 char 值。 |
int compareTo(String anotherString) | 按字典顺序比较两个字符串。只比较首字符的ascii码值 |
int compareToIgnoreCase(String str) | 按字典顺序比较两个字符串,不考虑大小写。 |
String concat(String str) | 将指定字符串连接到此字符串的结尾。 |
boolean contentEquals(StringBuffer sb) | 当且仅当字符串与指定的StringBuffer有相同顺序的字符时候返回真。 |
static String copyValueOf(char[] data) | 返回指定数组中表示该字符序列的 String。 |
static String copyValueOf(char[] data, int offset, int count) | 返回指定数组中表示该字符序列的 String。[offset,count] |
boolean endsWith(String suffix) | 测试此字符串是否以指定的后缀结束。 |
boolean equals(Object anObject) | 将此字符串与指定的对象比较。 |
boolean equalsIgnoreCase(String anotherString) | 将此 String 与另一个 String 比较,不考虑大小写。 |
byte[] getBytes() | 使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。 |
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() | 返回字符串对象的规范化表示形式。就是从常量池里面取数据 |
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) | 告知此字符串是否匹配给定的正则表达式。 |
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 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(primitive data type x) | 返回给定data type类型x参数的字符串表示形式。 |
2 StringBuilder、StringBuffer
StringBuilder:可变的字符序列、效率高、线程不安全的
StringBuffer:可变的字符序列、效率低、线程安全的
底层都是用 char[]
2.1 为什么StringBuilder、StringBuffer是可变序列呢
StringBuilder、StringBuffer默认底层的字符数组不是用final修饰的,String的底层字符数组是final修饰的,不能重新赋值。
2.1 StringBuilder、StringBuffer扩容
首先创建时,默认给底层字符数组16个容量;判断追加的字符长度+当前的字符长度是否大于底层字符数组的长度,是就把底层字符数组的容量默认扩大到原来的2倍,之后再判断扩大后的字符数组容量是否大于追加的字符长度+当前的字符长度的长度,不大于,就直接把追加的字符长度+当前的字符长度的长度作为底层字符数组的长度,然后把追加的字符写进字符数组的末尾
- 注意:append后获取的对象的地址值不会改变。
2.2 StringBuilder、StringBuffer相关API
方法 | 描述 |
---|---|
int capacity() | 返回当前容量。 |
char charAt(int index) | 返回此序列中指定索引处的 char 值。 |
void ensureCapacity(int minimumCapacity) | 确保容量至少等于指定的最小值。 |
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) | 将字符从此序列复制到目标字符数组 dst。 |
int indexOf(String str) | 返回第一次出现的指定子字符串在该字符串中的索引。 |
int indexOf(String str, int fromIndex) | 从指定的索引处开始,返回第一次出现的指定子字符串在该字符串中的索引。 |
int lastIndexOf(String str) | 返回最右边出现的指定子字符串在此字符串中的索引。 |
int lastIndexOf(String str, int fromIndex) | 返回 String 对象中子字符串最后出现的位置。 |
int length() | 返回长度(字符数)。 |
void setCharAt(int index, char ch) | 将给定索引处的字符设置为 ch。 |
void setLength(int newLength) | 设置字符序列的长度。 |
CharSequence subSequence(int start, int end) | 返回一个新的字符序列,该字符序列是此序列的子序列。 |
String substring(int start) | 返回一个新的 String,它包含此字符序列当前所包含的字符子序列。 |
String substring(int start, int end) | 返回一个新的 String,它包含此序列当前所包含的字符子序列。 |
String toString() | 返回此序列中数据的字符串表示形式。 |