字符串类String
12.1.1 字符串对象的创建
- 
方式1:最简单方式
String str="你好";
 - 
方式2:构造函数方式
 
注意事项:String类对象是不可改变的,所以一旦创建了String对象它的值是无法改变的!
解释:修改后就是另一个对象,地址改变了
12.1.2 String类常用API
| SN(序号) | 方法描述 | 
|---|---|
| 1 | char charAt(int index) 返回指定索引处的 char 值 | 
| 2 | int compareTo(Object o) 把这个字符串和另一个对象比较 | 
| 3 | int compareTo(String anotherString) 按字典顺序比较两个字符串 | 
| 4 | int compareToIgnoreCase(String str) 按字典顺序比较两个字符串,不考虑大小写 | 
| 5 | String concat(String str) 将指定字符串连接到此字符串的结尾 | 
| 6 | boolean contentEquals(StringBuffer sb) 当且仅当字符串与指定的StringBuffer有相同顺序的字符时候返回真 | 
| 7 | [static String copyValueOf(char] data) 返回指定数组中表示该字符序列的 String | 
| 8 | [static String copyValueOf(char] data, int offset, int count) 返回指定数组中表示该字符序列的 String | 
| 9 | boolean endsWith(String suffix) 测试此字符串是否以指定的后缀结束 | 
| 10 | boolean equals(Object anObject) 将此字符串与指定的对象比较(类中重写了equals()方法,比较的时字符串的内容) | 
| 11 | boolean equalsIgnoreCase(String anotherString) 将此 String 与另一个 String 比较,不考虑大小写 | 
| 12 | [byte] getBytes() 使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中 | 
| 13 | [byte] getBytes(String charsetName) 使用指定的字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中 | 
| 14 | [void getChars(int srcBegin, int srcEnd, char] dst, int dstBegin) 将字符从此字符串复制到目标字符数组 | 
| 15 | int hashCode() 返回此字符串的哈希码 | 
| 16 | int indexOf(int ch) 返回指定字符在此字符串中第一次出现处的索引 | 
| 17 | int indexOf(int ch, int fromIndex) 返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索 | 
| 18 | int indexOf(String str) 返回指定子字符串在此字符串中第一次出现处的索引 | 
| 19 | int indexOf(String str, int fromIndex) 返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始 | 
| 20 | String intern() 返回字符串对象的规范化表示形式 | 
| 21 | int lastIndexOf(int ch) 返回指定字符在此字符串中最后一次出现处的索引 | 
| 22 | int lastIndexOf(int ch, int fromIndex) 返回指定字符在此字符串中最后一次出现处的索引,从指定的索引处开始进行反向搜索 | 
| 23 | int lastIndexOf(String str) 返回指定子字符串在此字符串中最右边出现处的索引 | 
| 24 | int lastIndexOf(String str, int fromIndex) 返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索 | 
| 25 | int length() 返回此字符串的长度 | 
| 26 | boolean matches(String regex) 告知此字符串是否匹配给定的正则表达式 | 
| 27 | boolean regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len) 测试两个字符串区域是否相等 | 
| 28 | boolean regionMatches(int toffset, String other, int ooffset, int len) 测试两个字符串区域是否相等 | 
| 29 | String replace(char oldChar, char newChar) 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的 | 
| 30 | String replaceAll(String regex, String replacement) 使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串 | 
| 31 | String replaceFirst(String regex, String replacement) 使用给定的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串 | 
| 32 | [String] split(String regex) 根据给定正则表达式的匹配拆分此字符串 | 
| 33 | [String] split(String regex, int limit) 根据匹配给定的正则表达式来拆分此字符串 | 
| 34 | boolean startsWith(String prefix) 测试此字符串是否以指定的前缀开始 | 
| 35 | boolean startsWith(String prefix, int toffset) 测试此字符串从指定索引开始的子字符串是否以指定前缀开始 | 
| 36 | CharSequence subSequence(int beginIndex, int endIndex) 返回一个新的字符序列,它是此序列的一个子序列 | 
| 37 | String substring(int beginIndex) 返回一个新的字符串,它是此字符串的一个子字符串 | 
| 38 | String substring(int beginIndex, int endIndex) 返回一个新字符串,它是此字符串的一个子字符串(含头不含尾) | 
| 39 | [char] toCharArray() 将此字符串转换为一个新的字符数组 | 
| 40 | String toLowerCase() 使用默认语言环境的规则将此 String 中的所有字符都转换为小写 | 
| 41 | String toLowerCase(Locale locale) 使用给定 Locale 的规则将此 String 中的所有字符都转换为小写 | 
| 42 | String toString() 返回此对象本身(它已经是一个字符串) | 
| 43 | String toUpperCase() 使用默认语言环境的规则将此 String 中的所有字符都转换为大写 | 
| 44 | String toUpperCase(Locale locale) 使用给定 Locale 的规则将此 String 中的所有字符都转换为大写 | 
| 45 | String trim() 返回字符串的副本,忽略前导空白和尾部空白 | 
| 46 | static String valueOf(primitive data type x) 返回给定data type类型x参数的字符串表示形式 | 
12.1.3 字符串类型和基本类型的转换
- 
int类型转换成String类型
String str=Integer.toString(int param) - 
String转换成int
int num=Integer.parseInt(String param)
Integer num=Integer.valueOf(String param) 
12.2 字符串比较
String s2="Monday";
System.out.println("s1==s2:"+(s1==s2));
System.out.println("s1.equals(s2):"+(s1.equals(s2)));
System.out.println("s2 address:"+System.identityHashCode(s2));
/*
* 字符串缓冲池
* 1.程序在运行的时候会创建一个字符串缓冲池
* 2.s1被放入缓冲池,放入前会查询缓冲池:是否有相同内容的字符串
* 3.s2预备放入缓冲池,放入前会查询缓冲池:查到有相同内容的字符串
* 它把s2指向了s1所指向的对象
*
*/
s1.equals(s2):true
s1 address:366712642
s2 address:366712642
(2)
String s2="Monday1";
System.out.println("s1==s2:"+(s1==s2));
System.out.println("s1.equals(s2):"+(s1.equals(s2)));
System.out.println("s2 address:"+System.identityHashCode(s2));
/*
* 字符串缓冲池
* 1.程序在运行的时候会创建一个字符串缓冲池
* 2.s1被放入缓冲池,放入前会查询缓冲池:是否有相同内容的字符串
* 3.s2预备放入缓冲池,放入前会查询缓冲池:没有查到查到有相同内容的字符串
* 所以s2也放入缓冲池
*
*/
String s2=new String("Monday").intern(); //构造方法声明不放入缓冲池
System.out.println("s1==s2:"+(s1==s2));
System.out.println("s1.equals(s2):"+s1.equals(s2));
System.out.println("s1 address:"+System.identityHashCode(s1));
System.out.println("s2 address:"+System.identityHashCode(s2));
s1.equals(s2):true
s1 address:42768293
s2 address:1717159510
System.out.println("before s1:"+s1);
System.out.println("before s1 address:"+System.identityHashCode(s1));
String s2=s1.replace("h", "f");
System.out.println("after s1:"+s1);
System.out.println("after s1 address:"+System.identityHashCode(s1));
System.out.println("after s2:"+s2);
System.out.println("after s2 address:"+System.identityHashCode(s2));
before s1 address:42768293
after s1:You are hired
after s1 address:42768293
after s2:You are fired
after s2 address:1717159510
12.3 字符串拼接
12.3.1 字符串拼接简介
- 
当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类;
 - 
与String 类不同:StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象;
 
12.3.2 StringBuffer类实现字符串拼接
(1)
 StringBuffer sbf=new StringBuffer();
   System.out.println("111sbf address:"+System.identityHashCode(sbf));
   //字符串拼接
   sbf.append("1");
   System.out.println("222sbf address:"+System.identityHashCode(sbf));
   sbf.append("2");
   System.out.println("333sbf address:"+System.identityHashCode(sbf));
   sbf.append("3");
   System.out.println("444sbf address:"+System.identityHashCode(sbf));
   sbf.append("4");
   System.out.println("555sbf address:"+System.identityHashCode(sbf));
   System.out.println(sbf.toString());
结果:
111sbf address:1768305536
222sbf address:1768305536
333sbf address:1768305536
444sbf address:1768305536
555sbf address:1768305536
1234
(2)
//创建一个StringBuffer对象
   StringBuffer sbf=new StringBuffer("Hello from Java");
   System.out.println("before sbf:"+sbf);
   System.out.println("before sbf address:"+System.identityHashCode(sbf));
   
   //执行replace
   sbf.replace(6, 10, "to");
   
   System.out.println("after sbf:"+sbf);
   System.out.println("after sbf address:"+System.identityHashCode(sbf));
结果:
before sbf:Hello from Java
before sbf address:42768293
after sbf:Hello to Java
after sbf address:42768293
12.3.3 StringBuilder类实现字符串拼接
12.3.4 StringBuffer与StringBuilder区别
- 
StringBuilder和StringBuffer之间的最大不同在于StringBuilder的方法是线程安全的(不能同步访问);
 - 
StringBuffer相较于StringBuilder有速度优势,所以多数情况下建议使用 StringBuffer类。但在应用程序要求线程安全的情况下,则必须使用StringBuilder类;
 
                    
                
                
            
        
浙公网安备 33010602011771号