字符串
1 创建字符串的方式
(1)三种构造方法
//创建一个空白字符串
public String();
//根据字符数组的内容,来创建字符串
public String(char[] array);
//根据字节数组的内容,来创建字符串
public String(byte[] array);
(2)一种直接创建
String str = "hello";
public static void main(String[] args){
String str1 = new String("hello");
char[] charArray = {'h','e','l','l','o'};
String str2 = new String(charArray);
byte[] byteArray = {97, 98, 99 };
String str3 = new String(byteArray);
String str4 = "hello";
}
2 字符串常量池
程序中直接写上双引号字符串,就在字符串常量池中。
- 对于基本类型来说,== 是进行数值比较;
- 对于引用类型来说,== 是进行地址值比较;
3 记
1 手动入池:
String str3 = new String("hello").intern();
2 内容比较:
为避免null异常,要将常量"hello"放到前面
"hello".equals(str))
:字符串内容比较
"hello".equalsIgnoreCase(str)
:忽略大小写进行比较
str.compareTo(str)
:比较两个字符串大小关系,返回大于1,小于-1,相等0
3 字符串获取:
str.length()
:获取字符串长度
str1.concat(str2)
:将str1与str2字符串进行拼接,返回新字符串
str.charAt(index)
:返回指定索引位置的字符
str.substring(2)
:从2处截取到字符串末尾
str.substring(2,4)
:从2处截取到4(不包含4)
5 字符串与字符数组的转换:
str.toCharArray()
:返回字符数组char[ ]
str.getBytes()
:返回字节数组byte[ ]
//字符数组转字符串的两种方式
char[] arrays = {'a','b','g'};
String ret = new String(arrays);
//或
String.copyValueOf(arrays);
6 字符串的分割:
"aaa,bbb,ccc".split(",")
:将"aaa,bbb,ccc"按照“,”分割成多个部分,返回字符串数组String[ ]
str.split(" ",5)
:将str按空格分割为字符串数组,限制字符串数组长度为5
注意:
"aaa.bbb.ccc".split("\\.")
:切割英文句点必须写"\."
\表示对\进行转义,\.表示对一个斜杠转义后,再对.进行转义
7 字符串查找
str.contains(str1)
:判断字符串是否包含str1,包含返回true
str.indexOf("he")
:查找"he"在str中出现的第一次索引位置
str.indexOf("he",2)
:从2处开始查找"he"在str中出现的第一次索引位置
str.lastIndexOf(str1)
:从后向前查找字符串位置
str.lastIndexOf(str1,2)
:由2处从后向前查找字符串位置
str.startsWith(str1)
:判断是否以指定字符串开头
str.startsWith(str1,2)
:从2出开始判断是否以指定字符串开头
str.endsWith(str1)
:判断是否以指定字符串结尾
8 字符串替换
str.replaceAll("1","2")
:将字符串str中的1全部替换为2
str.replaceFirst("1","2")
:将字符串str中的第一个1替换为2
str.replace(old,new)
:将str中的old字符串换为new字符串
等同于str.replaceAll(old,new);
注意:
字符串为不可变对象,替换不修改当前对象,而是产生了一个新的字符串
9 其他
str.trim()
:去掉字符串的左右空格,保留中间空格
str.toUpperCase
:字符串转大写
str.toLowerCase
:字符串转小写
str.intern()
:字符串入池操作
str1.concat(str2)
:字符串拼接相当于+,不入池
str.length()
:获取字符串长度
str.isEmpty
:判断是否为空字符串即长度为0,""
10 数字字符串转int
Integer.valueOf(String s)
public static Integer valueOf(String s) throws NumberFormatException {
return Integer.valueOf(parseInt(s, 10));
}
public static void main(String[] args) {
String[] nums={"5","7"};
int gg = Integer.valueOf(nums[1]);
System.out.println(gg);//7
}
注意:
- " " +任何类型 返回的都是字符串
StringBuffer和StringBuilder
StringBuffer和StringBuilder功能相同,唯一的区别是StringBuffer是线程安全的;即其所有的内置函数都被关键字synchronized
修饰。
- StringBuffer的安全性高,效率低。
- StringBuilder安全性低,效率高。
- String的内容不可修改,StringBuffer、StringBuilder的内容可以进行修改。
String和StringBuffer类不能直接转换,要转换可采用如下原则:
- String转StringBuffer:可通过StringBuffer的构造方法或append()方法
StringBuffer str = new StringBuffer("hello");
str.append("world").append("!!!");
- StringBuffer转String:调用toString()方法
StringBuffer str = new StringBuffer("hello");
String str1 = str.toString();
StringBuffer和StringBuilder的常用方法相同:
- append()方法:可以向StringBuffer中添加各种数据,boolean, char, char[], double, float, int, long,Object, String, StringBuffer.
- charAt()
- delete(int start, int end): 删除指定范围的字符
- deleteCharAt(int index): 删除指定位置的字符
- indexOf(String str): 返回指定字符串第一次出现的索引
public synchronized StringBuffer insert(int offset,各种类型数据 b);
- length();
- reverse(): 反转
- setLength(int newLenth): 设定StringBuffer的长度,常用来清空StringBuffer
- toString()