一、连接字符串
1、连接多个字符串
使用“+”运算符可以实现连接多个字符串的功能。“+” 运算符可以连接多个运算符并产生一个 String 对象。
2、连接其他数据类型
字符串与其他基本数据类型进行连接,会将这些数据直接转换成字符串。
3、public String concat(String str)
将指定的字符串连接到该字符串的末尾。
Demo:
public static void main(String[] args) {
String str1 = "Hello";
String str2 = "Java"; // 使用"+" 运算符连接
System.out.println(str1+" "+str2); // Hello Java int booktime = 4;
double practice = 4.5;
// 连接不同数据类型的字符串
System.out.println("我每天花费"+booktime+"小时看书,"+practice+"小时练习"); // 我每天花费4小时看书,4.5小时练习 // concat:将字符串连接到该字符串尾部。
System.out.println(str1.concat(" World")); // Hello World }
二、字符串的比较
1、==:比较对象的地址
只有两个字符串的常量对象比较时才会返回 true,其他的都是 false。
2、public boolean equals( Object anObject)
此方法将此字符串与指定对象进行比较,严格区分大小写。因为 String 类型重写了 Object的 equals。
3、public boolean equalsIgnorCase(String anOtherString)
将此字符串与指定字符串对象比较,忽略大小写。
Demo:
public static void main(String[] args) { // 创建字符串对象
String s1 = "hello";
String s2 = "hello";
String s3 = "HELLO"; // boolean equals(Object obj):比较字符串的内容是否相同
System.out.println(s1.equals(s2)); // true
System.out.println(s1.equals(s3)); // false //boolean equalsIgnoreCase(String str):比较字符串的内容是否相同,忽略大小写
System.out.println(s1.equalsIgnoreCase(s2)); // true
System.out.println(s1.equalsIgnoreCase(s3)); // true }
注意:
a、== 是进行对象的地址值比较,比较字符串的内容用 equal 方法。
b、在使用 equal 的时候,如果比较双方一个常量一个变量,推荐把常量字符串写在前面,因为一旦变量为 null ,会报空指针异常。
扩展:Object 是” 对象”的意思,也是一种引用类型。作为参数类型,表示任意对象都可以传递到方法中
4、大小比较
String 类型实现了 Comparable 接口,重写了 compareTo 方法,严格区分大小写,会依次比较对应位置的字符。
如:hello和Hello,先[0]位置的h和H,h>H,就直接认定为hello>Hello
hello和hella,先[0][1][2][3]比较,都一样,最后到[4]o>a,认定hello>hella
hello和helloworld,发现前面都一样,长的大
5、大小比较:不区分大小写
String 类提供了一个方法 compareToIgnoreCase,可以忽略大小写比较
6、按照每个国家的语言校对顺序
java.text.Collator:Collator 类执行区分语言环境的 String 比较。使用此类可为自然语言文本构建搜索和排序例程。
Collator实现了Comparator接口 ,Collator是抽象类,不能直接创建对象,它有一个直接子类RuleBasedCollator。
Collator内部提供了一个静态方法,可以获取一个它的子类对象。
Demo:
@Test
public void test1(){
String[] arr = {"张三","李四","王五","赵六","钱七"};
//希望按照拼音顺序,字典顺序
Arrays.sort(arr, Collator.getInstance());//默认语言环境,因为现在的操作系统的平台是中文win
System.out.println(Arrays.toString(arr));
} @Test
public void test2(){
String[] arr = {"张三","李四","王五","赵六","钱七"};
//希望按照拼音顺序,字典顺序
Arrays.sort(arr, Collator.getInstance(Locale.CHINA));//Locale.CHINA指定语言环境
System.out.println(Arrays.toString(arr));
}
三、获取字符串长度与查找的方法
1、public int length()
返回此字符串的长度,因为String的内部(JDK1.9之前)用char[]实现,这个长度就是value数组的长度。
2、public int indexof(String str)
返回指定子字符串第一次出现在该字符串内的索引,如果没有检索到,返回 -1。
3、public int lastIndexof(String str)
返回指定子字符串在此字符串中最后一次出现处的索引位置,如果没有检索到,返回 -1。
4、public boolean contains(CharSequence str)
当且仅当此字符串包含指定的 char 值序列时,返回 true。
Demo:
public static void main(String[] args) {
String s = "Hello World"; // int length :获取字符串的长度,其实也就是字符个数
System.out.println(s.length()); // 11 //char charAt(int index) 获取指定索引处的字符
System.out.println(s.charAt(0)); // H //int indexOf(String str):获取str在字符串对象中第一次出现的索引,没有返回‐1
System.out.println(s.indexOf("o")); // 4 //int lastIndexOf(String str):获取str在字符串对象中最后一次出现的索引,没有返回‐1
System.out.println(s.lastIndexOf("rl")); // 8 //boolean contains(String str):查看指定的字符串是否在该字符串中,存在为true,不存在为 false
System.out.println(s.contains("Wo")); // true
}
四、与 char 相关
1、char[] toCharArray()
将此字符串转换为新的字符数组。
2、char charAt(index)
返回指定索引处的 char 值
3、String(char[] arr)
通过一个 char数组构建一个字符串对象
4、String(char[] arr, int offset, int count)
通过一个 char 数组,截取其中的一端,构建一个字符串对象
五、与 Byte 相关(和编码与解码相关)
1、byte[] getBytes() 编码方法
byte[] getBytes():编码的方法,使用平台默认的字符编码进行编码
byte[] getBytes(编码方式):使用指定的编码格式进行编码
编码:对于ASCII码范围内(0~127),无论用什么编码方式,结果都是一样的,一个字符对应一个字节的编码值
对于其他的字符,编码,结果不一定是几个字节,例如汉字:
UTF-8:变长的,但是大多数汉字都是3个字节
GBK、GB2312:固定2个字节
ISO8859-1:不支持中文,所有字符都变为1个字节
Demo:
@Test
public void test01(){
String str = "abc";
byte[] bytes = str.getBytes();
System.out.println(Arrays.toString(bytes));//[97, 98, 99]
} @Test
public void test02() throws UnsupportedEncodingException{
String str = "你好,世界";
byte[] bytes = str.getBytes("GBK");
System.out.println(Arrays.toString(bytes)); String string = new String(bytes,"GBK");
System.out.println(string);
}
2、new String() 解码方法
new String(字节数组)
new String(字节数组,编码方式)
扩展:产生乱码原因:
(1)编码与解码字符集不一致
(2)缺字节,如使用ISO8859-1编码不支持中文,就会造成缺字节现象。
四、转换功能的方法
1、public String toLowerCase()
使用默认语言环境的规则将此 String
中的所有字符都转换为小写。
2、public String toUpperCase()
使用默认语言环境的规则将此 String
中的所有字符都转换为大写。
Demo:
public static void main(String[] args) {
String str = "abcdefg"; // char[] toCharArray():把字符串转换位字符数组
char[] chars = str.toCharArray();
System.out.println(Arrays.toString(chars)); // [a, b, c, d, e, f, g] // byte[] getBytes():把字符串转换为字节数组
byte[] bytes = str.getBytes();
System.out.println(Arrays.toString(bytes)); // [97, 98, 99, 100, 101, 102, 103] String str2 = "iT,i Love You"; // String replace(old str,new str):把匹配的原来的字符串用新的字符串替换掉
String replace = str2.replace("i", "I");
System.out.println(replace); // IT,I Love You //String toLowerCase():将此 String 中的所有字符都转换为小写。
System.out.println(str2.toLowerCase()); // it,i love you //String toUpperCase():将此 String 中的所有字符都转换为大写。
System.out.println(str2.toUpperCase()); // IT,I LOVE YOU }
扩展:CharSequence 是一个接口,也是一种引用类型。作为参数类型,可以把String对象传递到方法中。
五、截取分割字符串的方法
1、public String subString(int beginIndex)
返回一个子字符串,从beginIndex开始截取字符串到字符串结尾。
2、public String subString(int beginIndex,int endIndex)
返回一个子字符串,从beginIndex到endIndex截取字符串。含beginIndex,不含endIndex。(左闭右开区间)
六、拆分
1、public String split(String regex)
将此字符串按照给定的regex(规则,可以是正则表达式)拆分为字符串数组。
注意:如果按照英文句点“.”进行切分,必须写"\\."(两个反斜杠)
Demo:
public static void main(String[] args) {
String str = "aa|bb|cc|dd|ee"; //String subString(int start):从start开始截取字符串到字符串结尾
System.out.println(str.substring(6)); // cc|dd|ee //String subString(int start,int end):从start到end截取字符串。含start,不含end。
System.out.println(str.substring(2,8)); // |bb|cc //String split(string regex):按照给定的regex(规则)拆分为字符串数组。
String[] split = str.split("|"); System.out.println(Arrays.toString(split)); //[a, a, |, b, b, |, c, c, |, d, d, |, e, e] }
七、匹配方法
1、boolean matches(正则表达式)
用于校验某个字符串是否符合XXX的规则
Demo:
public void test2(){
String str = "12a345";
//简单判断是否全部是数字,这个数字可以是1~n位 //正则不是Java的语法,它是独立与Java的规则
//在正则中\是表示转义,
//同时在Java中\也是转义
boolean flag = str.matches("\\d+");
System.out.println(flag);
}
八、替换
1、String replace(target, value)
将与target匹配的字符串使用value字符串替换。(如果没有可以匹配的字符,将原字符串返回)不支持正则表达式。
2、String replaceAll(String regex, String replacement)
使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
3、String replaceFirst(String regex, String replacement)
用给定的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。
九、其他方法
1、public String trim()
返回字符串的副本,忽略前导空白和尾部空白。
2、boolean isEmpty()
是否是空字符串
2、public boolean startsWith(String prefix)
测试此字符串是否以指定的前缀开始。
3、public boolean endsWidth(String suffix)
测试此字符串是否以指定的后缀结束。
4、public int campareTo()
按字典顺序比较两个字符串。
5、public int compareToIgnoreCase()
按字典顺序比较两个字符串,忽略大小写。
注意:该比较基于字符串中各个字符的 Unicode 值,按字典顺序将此 String对象表示的字符序列与参数字符串所表示的字符序列进行比较。
如果按字典顺序此 String 对象位于参数字符串之前,则比较结果为一个负整数;如果按字典顺序此 String 对象位于参数字符串之后,则比较结果为一个正整数;如果这两个字符串相等,则结果为 0。
Demo:
public static void main(String[] args) {
String str = " Hello World "; //String trim():忽略字符串前导空白和尾部空白。
System.out.println(str.trim()); // Hello World // boolean startswith测试此字符串是否以指定的前缀开始。
System.out.println(str.startsWith(" He")); // true
System.out.println(str.startsWith("he")); // false // boolean endswith测试此字符串是否以指定的后缀结束。
System.out.println(str.endsWith("ld ")); // true
System.out.println(str.endsWith("ll")); // false //
String str2 = "hello java";
//compareTo()字典顺序比较两个字符串。
System.out.println(str2.compareTo(str)); // 72
// compartToIgnoreCase()字典顺序比较两个字符串,忽略大小写
System.out.println(str2.compareToIgnoreCase(str)); //
}