String类
字符串的创建
主要有以下5种创建方式:
package com.test;
public class Test {
public static void main(String[] args) {
//创建字符串的方式
String s1="Hello World!";
String s2="";
String s3=new String("Hello World!!");
char[] c1= {'j','a','v','a'};
String s4=new String(c1);
char[] c2= {'h','e' ,'l','l','o','j','a','v','a'};
//第二个参数代表子数组的第一个字符的索引,第三个参数代表子数组的长度
String s5=new String(c2,3,5);
System.out.println(s1);
System.out.println(s2);
System.out.println(s3);
System.out.println(s4);
System.out.println(s5);
}
}
输出:
Hello World!
Hello World!!
java
lojav
字符串相关方法的调用
package com.test;
public class Test {
public static void main(String[] args) {
String s1="Hello World!";
System.out.println("字符串的长度:"+s1.length());
System.out.println("字符串中的第一个字符:"+s1.charAt(0));
System.out.println("字符l第一次出现的位置:"+s1.indexOf("l"));
System.out.println("字符l最后一次出现的位置:"+s1.lastIndexOf("l"));
System.out.println("将World替换为Java:"+s1.replace("World","Java"));
System.out.println("从第六个字符截取到末尾:"+s1.substring(5));
System.out.println("判断字符串是否以He开头:"+s1.startsWith("He"));
System.out.println("判断字符串是否以ld结尾:"+s1.endsWith("ld"));
System.out.println("判断字符串是否包含He:"+s1.contains("He"));
System.out.println("判断字符串是否为空:"+s1.isEmpty());
System.out.println("将字符串中的字母转换成大写:"+s1.toUpperCase());
String s2=" Hello Java! ";
System.out.println("去掉字符串两端的空格:"+s1.trim());
System.out.println("去掉字符串所有的空格:"+s1.replace(" ",""));
System.out.println("判断字符串相同:"+s2.equals(s1));
//字符串的连接操作
String s3;
s3=s1+s2;
String s4=s1.concat(s2);
System.out.println(s3);
System.out.println(s4);
}
}
输出:
字符串的长度:12
字符串中的第一个字符:H
字符l第一次出现的位置:2
字符l最后一次出现的位置:9
将World替换为Java:Hello Java!
从第六个字符截取到末尾: World!
判断字符串是否以He开头:true
判断字符串是否以ld结尾:false
判断字符串是否包含He:true
判断字符串是否为空:false
将字符串中的字母转换成大写:HELLO WORLD!
去掉字符串两端的空格:Hello World!
去掉字符串所有的空格:HelloWorld!
判断字符串相同:false
Hello World! Hello Java!
Hello World! Hello Java!
字符串的比较操作
compareTo()和compareToIgnoreCase()
compareTo()方法按字典顺序比较两个字符串。compareToIgnoreCase()方法是按字典顺序比较两个字符串,但不考虑大小写。
如果此字符串等于参数字符串,则返回0;如果此字符串按字典顺序小于参数字符串,则返回一个小于 0 的值;如果此字符串按字典顺序大于参数字符串,则返回一个大于 0 的值。
package com.test;
public class Test {
public static void main(String[] args) {
String s1="Hello World!";
String s2="Hello Java!";
String s3="HELLO JAVA!";
int a1=s1.compareTo(s2);
int a2=s3.compareToIgnoreCase(s2);
//W-J=13
System.out.println(a1);
System.out.println(a2);
}
}
输出:
13
0
字符串解析
在java.lang 包中有一个String.split()方法,可以将字符串解析为一个数组。
package com.test;
public class Test {
public static void main(String[] args) {
String ss = "one little,two little,three little.";
String[] str = ss.split("[ ,.]");
for (String s : str) {
System.out.println(s);
}
}
}
输出:
one
little
two
little
three
little
正则表达式的模式是空格、英文逗号和英文句号。也就是按照这三个对字符串进行解析和分割。
正则表达式
在String 类中提供了matches()方法,用于检查字符串是否匹配给定的正则表达式。
package com.test;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args) {
// 要验证的字符串
String str = "xyz@abc.net";
// 邮箱验证规则
String regEx = "[a-zA-Z_]{1,}[0-9]{0,}@(([a-zA-z0-9]-*){1,}\\.){1,3}[a-zA-z\\-]{1,}";
// 编译正则表达式
Pattern pattern = Pattern.compile(regEx);
// 忽略大小写的写法
// Pattern pat = Pattern.compile(regEx, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(str);
// 字符串是否与正则表达式相匹配
boolean rs = matcher.matches();
System.out.println(rs);
}
}
输出:
true
字符串的类型转换
toCharArray()方法,它将字符串转换为字符数组。
package com.test;
public class Test {
public static void main(String[] args) {
// toCharArray()
String str = "java develop,jsp develop,vb develop";
char[] c = str.toCharArray();
System.out.println("字符数组的长度:" + c.length);
System.out.println("char 数组中的元素是:");
for (int i = 0; i < str.length(); i++) {
System.out.print(c[i] + " ");
}
}
}
输出:
字符数组的长度:35
char 数组中的元素是:
j a v a d e v e l o p , j s p d e v e l o p , v b d e v e l o p
valueOf()方法,作用是返回参数数据类型的字符串表示形式。指定要返回的字符串类型的数据类型,这里是布尔型、字符型、整型、长整型、浮点型、双精度浮点型、对象、字符数组和字符数组的子字符数组。
package com.test;
public class Test {
public static void main(String[] args) {
// valueOf 方法的使用
boolean b = true;
System.out.println("布尔类型=>字符串:");
System.out.println(String.valueOf(b));
int i = 34;
System.out.println("整数类型=>字符串:");
System.out.println(String.valueOf(i));
}
}
输出:
布尔类型=>字符串:
true
整数类型=>字符串:
34
格式化字符串
package com.test;
public class Test {
public static void main(String args[]) {
String str1 = String.format("32 的八进制:%o", 32);
System.out.println(str1);
String str2 = String.format("字母G 的小写是:%c%n", 'g');
System.out.print(str2);
String str3 = String.format("12>8 的值:%b%n", 12 > 8);
System.out.print(str3);
String str4 = String.format("%1$d,%2$s,%3$f", 125, "ddd", 0.25);
System.out.println(str4);
}
}
输出:
32 的八进制:40
字母G 的小写是:g
12>8 的值:true
125,ddd,0.250000
StringBulder
对String、StringBuffer 和StringBuilder 这3 个类的选择总结如下:
- 如果要操作少量的数据,建议使用String。
- 在单线程操作字符串缓冲区的情况下操作大量数据,建议使用StringBuilder。
- 在多线程操作字符串缓冲区的情况下操作大量数据,建议使用StringBuffer。
package com.test;
public class Test {
public static void main(String args[]) {
StringBuilder sb1=new StringBuilder();
StringBuilder sb2=new StringBuilder("Hello World!");
//追加
sb1.append("Hello");
sb1.append("World!");
System.out.println(sb1);
//插入
sb1.insert(5, ',');
System.out.println(sb1);
//删除
sb1.deleteCharAt(5);
System.out.println(sb1);
sb1.delete(5,7);
System.out.println(sb1);
//反转
sb2.reverse();
System.out.println(sb2);
//替换字符串
sb2.replace(1,5,"ELLO");
System.out.println(sb2);
//替换字符
sb2.setCharAt(1, 'w');
System.out.println(sb2);
}
}
输出:
Hello,World!
HelloWorld!
Hellorld!
!dlroW olleH
!ELLOW olleH
!wLLOW olleH