- 1、字符,字节与字符串
- 1.1、字符数组与字符串之间互相转换
- 1.2、字符串转换为字符
- 1.3、字节数组转换成字符串
- 1.4、字节串转换成字节数组
- 2、字符串的比较
- 3、字符串的查找
- 4、字符串的替换
- 5、字符串拆分
- 6、字符串截取
- 7、补充操作
- 8、StringBuffer 和 StringBuilder
引言:JDK在String类中为我们提供了很多的方法,也就是API,下面我们列举一些常用的API,并结合一些代码实例去帮助这些API的用法。 1、字符,字节与字符串 1.1、字符数组与字符串之间互相转换
字符串内部包含一个字符数组,String 可以和 char[] 相互转换.
方法1:调用String类的构造方法,传入字符数组。
//字符数字转换成字符串
char[] ch=new char[]{'a','b','c'};
String str=new String(ch);
//abc
方法2:将字符数组中索引从offset位置开始,一共count个字符转换为字符串。
char[] ch=new char[]{'a','b','c'};
String str=new String(ch,0,1);
System.out.println(str);
//a
1.2、字符串转换为字符
方法1:获取index位置的字符
char[] ch=new char[]{'a','b','c'};
String str=new String(ch);
char c=str.charAt(1);
System.out.println(c);
// b
方法2:将字符串转换为字符数组
char[] ch=new char[]{'a','b','c'};
String str=new String(ch);
char[] ch2=str.toCharArray();
System.out.println(Arrays.toString(ch2));
//[a, b, c]
1.3、字节数组转换成字符串
字节常用于数据传输以及编码转换的处理之中,String 也能方便的和 byte[] 相互转换
方法1:将字节数组转变为字符串。
byte[] be=new byte[]{97,98,99};
String str= new String(be);
System.out.println(str);
//abc
方法2:从字节数组的offset索引开始,长度为length个元素转变为字符串
byte[] be=new byte[]{97,98,99};
String str=new String(be,0,2);
System.out.println(str);
//ab
1.4、字节串转换成字节数组
方法3:按照默认的编码(UTF-8)格式将字符串转变为字节数组保存
byte[] be=new byte[]{97,98,99};
String str=new String(be,0,2);
byte[] be1=str.getBytes();
System.out.println(Arrays.toString(be1));
//[97, 98]
方法4:按照我们给定的编码格式进行转化
上面使用过String类提供的equals()方法,该方法本身是可以进行区分大小写的相等判断。除了这个方法之外,String类还提供有如下的比较操作:
方法1:严格比较每一个字符的内容,大小写不同也不可以
String str1="abc";
String str2="abc";
String str3="Abc";
System.out.println(str1.equals(str2));
System.out.println(str1.equals(str3));
// true
// false
方法2:不区分大小写的比较(在开发中常用在校验验证码)
String str1="abc";
String str2="abc";
String str3="Abc";
System.out.println(str1.equalsIgnoreCase(str3));//str3-str1
//true
方法3:比较大小关系(字符通过相应的编码格式转变成int类型进行大小的比较,最后返回的也是一个整型)
String str1="abc";
String str2="abc";
String str3="Abc";
System.out.println(str1.compareTo(str3));
//32
3、字符串的查找
从一个完整的字符串之中可以判断指定内容是否存在,对于查找方法有如下定义:
方法1:判断一个字符串是否存在
String str="hello world";
String s="hello";
String s1="abc";
String s2="r";
System.out.println(str.contains(s));
System.out.println(str.contains(s1));
System.out.println(str.contains(s2));
//true
//false
//true
方法2:从头开始查找,找到了则返回字符串第一个字符出现的位置,查不到则返回-1;
String str="hello world";
String s="hello";
String s1="abc";
String s2="r";
String s3="llo";
System.out.print(str.indexOf(s));
System.out.print(str.indexOf(s1));
System.out.print(str.indexOf(s2));
System.out.print(str.indexOf(s3));
// 0 -1 8 2
方法3:从指定位置开始查找
String str="hello world";
String s2="r";
System.out.print(str.indexOf(s2,4));
System.out.print(str.indexOf(s2,9));
System.out.print(str.indexOf(s2,8));
//8 -1 8
方法6:判断字符串是否以指定字符开头
String str="hello world";
String s="hello";
String s1="abc";
String s2="r";
System.out.println(str.startsWith(s));
System.out.println(str.startsWith(s1));
System.out.println(str.startsWith(s2));
// true false false
方法8:判断字符串是否以指定字符结尾
String str="hello world";
String s="hello";
String s1="abc";
String s2="d";
System.out.println(str.endsWith(s));
System.out.println(str.endsWith(s1));
System.out.println(str.endsWith(s2));
// false false true
4、字符串的替换
使用一个指定的新的字符串替换掉已有的字符串数据,可用的方法如下:
方法1:替换所有的指定内容
String str="aaacbdeeee";
String str1=str.replaceAll("a","e" );
System.out.println(str1);
//eeecbdeeee
方法2:替换首个内容
String str="aaacbdeeee";
String str1=str.replaceFirst("a","_" );
System.out.println(str1);
//_aacbdeeee
5、字符串拆分
可以将一个完整的字符串按照指定的分隔符划分为若干个子字符串。
方法1:将字符串按照给定的格式拆分
例如:将字符串从空格位置拆分
String str="hello world";
System.out.println(Arrays.toString(str.split(" ")));
//[hello, world]
当不给定格式时,就将字符串的每个字符都拆分成一个字符元素
String str="hello world";
System.out.println(Arrays.toString(str.split("")));
//[h, e, l, l, o, , w, o, r, l, d]
方法2:拆分成长度为limit的数组
String str="hello world";
System.out.println(Arrays.toString(str.split("",2)));
//[h, ello world]
String str="hello world";
System.out.println(Arrays.toString(str.split(" ",2)));
//[hello, world]
注意:
拆分是特别常用的操作. 一定要重点掌握. 另外有些特殊字符作为分割符可能无法正确切分, 需要加上转义
示例:拆分IP地址:
String str = "192.168.1.1" ;
String[] result = str.split("\.") ;
for(String s: result) {
System.out.println(s);
}
6、字符串截取
从一个完整的字符串之中截取出部分内容。
String str = "helloworld" ;
System.out.println(str.substring(5));
System.out.println(str.substring(0, 5));
//world
//hello
截取过程中注意区间是左闭右开的
7、补充操作
注意这些方法是由之后都需要一个变量去保存返回的地址,原指向的对象内容不会变。
方法1:
String str = " hello world " ;
System.out.println("["+str+"]");
System.out.println("["+str.trim()+"]");
//[ hello world ]
//[hello world]
方法2:会将字符串中的所有小写字母转化成大写字母
String str = " hEllo world " ;
String str1=str.toUpperCase();
System.out.println(str1);
// HELLO WORLD
方法3:会将所有字符串转变成小写
String str = "HeLLO WORLD " ;
String str1=str.toLowerCase(Locale.ROOT);
System.out.println(str1);
//hello world
方法5:字符串的链接,但是链接的结果不入常量池
String str = "HeLLO WORLD " ;
String str1="lizhelin";
System.out.println(str.concat(str1));
//HeLLO WORLD lizhelin
8、StringBuffer 和 StringBuilder
首先来回顾下String类的特点:
任何的字符串常量都是String对象,而且String的常量一旦声明不可改变,如果改变对象内容,改变的是其引用的指向而已。
通常来讲String的操作比较简单,但是由于String的不可变性,为了方便字符串的修改,提供StringBuffer和StringBuilder类。
StringBuilder类和StringBuffer类使用起来语法是相同的。
在String中使用"+"来进行字符串连接,但是这个操作在StringBuilder类中需要更改为append()方法:
public synchronized StringBuilder append(各种数据类型 b)
范例:观察StringBuffer使用
public class Test{
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
sb.append("Hello").append("World");
fun(sb);
System.out.println(sb);
}
public static void fun(StringBuilder temp) {
temp.append("n").append("www.bit.com.cn");
}
}
//HelloWorld www.bit.com.cn
StringBuilder类中也提供了很多的字符串操作的方法:
方法1:字符串反转
public synchronized StringBuilder reverse()
方法2:删除指定范围的数据:
public synchronized StringBuilder delete(int start, int end)
方法3:插入数据
public synchronized StringBuilder insert(int offset, 各种数据类型 b)
面试题:请解释String、StringBuffer、StringBuilder的区别:
1、String的内容不可修改,StringBuffer与StringBuilder的内容可以修改.
2、StringBuffer是线程安全的操作,性能较差;StringBuilder是线程不安全,性能较高。



