java字符串列(java.lang.String)是java中使用频繁的类,很多时候,我们对他既熟悉又陌生。
一、java.lang.String 和 字符串常量池
1.String类是final,不可被继承。public final class String
2. String 对象是不可变,一旦被创建则无法改变,所以在内存中可共享。
当我们想要改变一个String对象的时候,jvm不会改变原来的对象,而是生成一个新的String对象,然后重新指向它,如果原来对象没有任何对象去引用,jvm的垃圾回收机制将会回收。
例:String name = "张三";//name 指向 “张三”
name = "李四";//name 指向 “李四”,且“张三”等待回收
3.String类的特殊创建方式,
String str = "abc";
"abc" 表示一个字符串对象,而 str是"abc"对象的地址,也叫 "abc"对象的引用。
4.字符串常量池
java运行是会维护一个 String pool,用来存放运行时产生的各种字符串,且池中的字符串的内容不重复。
6.String类的创建方式
查询Java Api 可以知道,String类的创建方式有很多,其中最常用的有:
(1)String s = new String("abc");//使用new 关键字
(2)String s = "abc";
(3)String s = "ab" + "c";
其他的构造方法的参数,可以参看String类的API文档。
7.创建感悟:
(1)无论使用哪种方式来创建字符串对象,java运行时会在字符串常量池中寻找是否存在内容相同的字符串对象,若不存在,则在字符串常量池中创建,否则不创建,直接指向。
(2)java中,只要使用new关键字来创建对象,则一定会创建一个新的对象。
8.常见操作
A)查找
1.char charAt(int index)//返回指定索引出的字符值
例:String str = "abcedfgh";
char ch = str.charAt(2);//c
说明:
第一个 char 值位于索引 0 处。
如果 index 参数为负或小于此字符串的长度,抛出: IndexOutOfBoundsException
2.boolean startWith(String prefix)//测试此字符串是否以指定的前缀开始
例:String str = "aaccddff";
boolean flag = str.startWith("aa");//true
说明:
如果参数表示是此字符串前缀,则返回 true;否则返回 false。
注意,如果参数是空字符串,或者等于此 String 对象(用 equals(Object) 方法确定),则返回 true。
3.boolean endsWith(String suffix) //测试此字符串是否以指定的前缀结束
例:String str = "aaa.java.txt";
boolean flag = str.endsWith("java");//false
说明:
如果参数表示是此字符串后缀,则返回 true;否则返回 false。
注意,如果参数是空字符串,或者等于此 String 对象(用 equals(Object) 方法确定),则返回 true。
4.boolean contains(CharSequence s)//当且仅当此字符串包含指定的 char 值序列时,返回 true
例:String str = "abcedfgh";
boolean flag = str.contains("a");//true
说明:
如果此字符串包含 s,则返回 true,否则返回 false
如果 s 为 null,抛出:NullPointerException
5.int indexOf(int ch) //返回指定字符在此字符串中第一次出现处的索引。
int indexOf(int ch, int fromIndex) //返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索。
int indexOf(String str) //返回指定子字符串在此字符串中第一次出现处的索引。
int indexOf(String str, int fromIndex) //返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。
例:String str = "efdfsadddd";
int index = str.indexOf("d");//2
int index1 = str.indexOf("d",3);//6
int index1 = str.indexOf("k");//-1
说明:如果此字符串中没有这样的字符,则返回 -1。
6.int lastIndexOf(int ch) //返回指定字符在此字符串中最后一次出现处的索引。
int lastIndexOf(int ch, int fromIndex) //返回指定字符在此字符串中最后一次出现处的索引,从指定的索引处开始进行反向搜索。
int lastIndexOf(String str) //返回指定子字符串在此字符串中最右边出现处的索引。
int lastIndexOf(String str, int fromIndex) //返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索。
说明:与 5 相反
B)替换
1. String replace(char oldChar, char newChar) //返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
例:String str = "abababab";
str = str.replace('a','b');//bbbbbbbb
2. String replaceAll(String regex, String replacement) //使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
例:String str = "abababab";
str = str.replace("ab","cc");//cccccccc
3. String replaceFirst(String regex, String replacement)//使用给定的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。
例:String str = "abababab";
str = str.replaceFirst("ab","cc");//ccababab
C)比较
1. int compareTo(String anotherString) //按字典顺序比较两个字符串。
例:String str1 = "abc";
String str2 = "Abc";
int result = str1.compareTo(s2);//32
说明:比较原理:依次比较每个字符的字符编码,首先比较两个字符串的第一个字符,
如果第一个字符串的字符编码大与第二个的字符串的字符编码,则返回大与0的值,
如果小于则返回小于0的值,如果相等则比较后续的字符,
如果两个字符串的字符编码完全相同则返回0
2.int compareToIgnoreCase(String str) //按字典顺序比较两个字符串,不考虑大小写。 比较原理同上
例:String str1 = "abc";
String str2 = "Abc";
int result = str1.compareToIgnoreCase(s2);//0
3. boolean equals(Object anObject) //将此字符串与指定的对象比较。
例:String str = "abc";
boolean flag = str.equals("abc");//true
说明:
当且仅当该参数不为 null,并且是与此对象表示相同字符序列的 String 对象时,结果才为 true。
4. boolean equalsIgnoreCase(String anotherString) //将此 String 与另一个 String 比较,不考虑大小写。
D)切割
1. String[] split(String regex) //根据给定正则表达式的匹配拆分此字符串,返回一个String数组
例:String str = "Hello World!";
String[] strs = str.split(" ");
2. String substring(int beginIndex) //返回一个新的字符串,它是此字符串的一个子字符串。该子字符串从指定索引处的字符开始,直到此字符串末尾
例:String str = "Hello world";
str = str.substring(0);//Hello world
说明:
如果 beginIndex 为负或大于此 String 对象的长度,抛出:IndexOutOfBoundsException 异常
3. String substring(int beginIndex, int endIndex) //返回一个新字符串,它是此字符串的一个子字符串。
例:String str = "Hello world";
str = str.substring(0,str.length());//Hello world
说明:
如果 beginIndex 为负,或 endIndex 大于此 String 对象的长度,或 beginIndex 大于 endIndex,抛出:IndexOutOfBoundsException 异常
注意:包含开始不包含结束
E)转换
1. char[] toCharArray() //将此字符串转换为一个新的字符数组。
例:String str = "abcdef";
char[] ch = str.toCharArray();//结果返回一个char类型的字符数组
2. static String copyValueOf(char[] data) //返回指定数组中表示该字符序列的 String。
例:str = String.copyValueOf(ch);//返回 abcdef
3. String toLowerCase() //将此 String 中的所有字符都转换为小写。
4. String toString() //返回此对象本身(它已经是一个字符串!)。
5. String toUpperCase() //将此 String 中的所有字符都转换为大写。
6. String trim() //返回字符串的副本,忽略前后空白。
F)其他
1.int length() // 返回字符串的长度
2.boolean isEmpty() //判断字符串是否为空,当且仅当 length() 为 0 时返回 true
3.String concat(String str) //将指定字符串连接到此字符串的结尾。
|