String字符串
String:字符串,使用一对“”引起来表示
-
String声明为final的,不可被继承
-
String实现了Serializable接口:表示字符串是支持序列化的
- 实现了Comparable接口:表示String可以比较大小
-
String内部定义了final char[] value用户存储字符串数据
-
String:代表不可变的字符序列。简称:不可变性
体现:1.当对字符串重新赋值,需要重新指定内存区域赋值,不能使用原有的value进行赋值
- 当对现有的字符串进行连接操作时,也需要重新指定内存区域赋值,不能使用原有的value进行赋值
- 当调用String和replace()方法修改指定字符或字符串时,也需要重写指定内存区域
-
通过字面量的方式(区别于new)给一个字符串赋值,此时的字符串声明在字符串常量池中
-
字符串常量池中是不会存储相同内容的字符串的。
String常用方法1
1. int length():返回字符串的长度:return value.length
2. char charAt(int index):返回某段索引处的字符return value[index]
3. boolean isEmpty():判断是否是空字符串:return value.length = 0;
4. String toLowerCase():使用默认语言环境,将String中的所有字符转换为小写
5. String toUpperCase():使用默认语言环境,将String中的所有字符串转换为大写
6. String trim():返回字符串的副本,忽略前导空白和尾部空白
7. boolean equals(Object obj):比较字符串的内容是否相同
8. String concat(String str):将指定字符串连接到此字符串的结尾,等价于用“+”
9. int compareTo(String anotherString):比较两个字符串的大小
10. String substring(int beginIndex):返回一个新字符串,它是此字符串的从beginIndex开始截取到最后一个子字符串
11. String substring(int beginIndex,int endIndex):返回一个新字符串,它是此字符串的从beginIndex开始截取到endIndex(不包含)的一个子字符串
String常用方法2
1. boolean endsWith(String suffix):测试此字符串是否可以指定的后缀结束。
2. boolean startsWith(String prefix):测试此字符串是否可以指定的前缀开始。
3. boolean startsWith(String prefix,int toffset):测试此字符串从指定索引开始的子字符串是否以指定前缀开始。
4. boolean contains(CharSequence s):当且仅此字符串包含指定的char值序列时,返回true。
5. int indexOf(String str):返回指定子字符串再次字符串中第一次出现处的索引。
6. int indexOf(String str,int fromIndex):返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。
7. int lastIndexOf(String str):返回指定子字符串在此字符串中最右边出现处的索引。
8. int lastIndexOf(String str,int fromIndex):返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索。
String常用方法3
String replace(char oldChar,char new Char):返回一个新的字符串,它是通过newChar替换词字符串出现的缩影oldChar得到的
String str1 = "北京欢迎您北京";
String str2 = str1.replace("北京","上海");
System.out.println(str2);
String replace(CharSequence target,CharSequence replacement):使用指定的字面值替换序列替换此字符串缩影匹配字面值目标序列的字符串
String replaceAll(String replaceAll(String regex,String replacement)):使用给定的replacement替换此字符串匹配给定的正则表达式的第一个字符串
String str3 = "12hello34word5java7891mysql1456";
String string = str3.replaceAll("\\d+",",").replaceAll("^,|,$","");
System.out.println(string);
String replaceFirst(String regex,String replacement):使用给定的replacement替换此字符串匹配给定的正则表达式的第一个字符串
boolean matches(String regex):告知此字符串是否匹配给定的正则表达式。
String str5 = "0751-43545100";
boolean result = str5.matches("0751-\\d{7,8}");
System.out.println(result);
String[] split(String regex):根据给定正则表达式的匹配拆分此字符串。
String[] split(String regex,int limit):根据匹配给定的正则表达式来拆分此字符串。最多不超过limit个。如果超过了,剩下的全部都放到最后一个元素中
String str = "hello|word|java";
String[] strs = str.split("\\|");
for(int i = 0;i < strs.length;i++){
System.out.println(strs[i]);
}
String str6 = "hello.word.java";
String[] strs2 = str6.split("\\.");
for (int i = 0; i < strs2.length; i++) {
System.out.println(strs2[i]);
}
String、StringBuffer、StringBuilder三者的异同?
String:不可变的字符序列;底层使用char[] 存储。
StringBuffer:可变的字符序列;线程安全的,效率低;底层使用char[] 存储
StringBuilder:可变的字符序列;jdk5.0新增的,线程不安全的,效率高;底层使用char[] 存储
StringBuffer:总结
-
增:append(xxx)
-
删:delete(int start,int end)
-
改:setCharAt(int n,char ch) / replace(int start,int end,String str);
-
查:charAt(int n);
-
插:insert(int offset,xxx)
-
长度:length();
-
遍历:for() + charAt() / toString()
对比String、StringBuffer、StringBuilder三者的效率:
从高到低排列:StringBuilder > StringBuffer > String