5.1字符串类
5.1.1String类的初始化
在使用String类进行字符串操作之前,首先需要对String类进行初始化。
在Java中可以通过一下两种方式:
1.使用字符串常量直接初始化一个String对象,具体代码如下:
String str1=“abc”; //常量池,即”abc“表示一个字符串常量
2.使用String类的构造方法初始化字符串对象,String类的常见构造方法如下:
方法声明 | 功能描述 |
String() | 创建一个内容为空的字符串 |
String(String value) | 根据指定的字符串内容创建对象 |
String(char[] value) | 根据指定的字符数组创建对象 |
String(byte[] bytes) | 根据指定的字节数组创建对象 |
案例学习5-1
public class Example01 {
public static void main(String[] args) throws Exception {
// 创建一个空的字符串
String str1 = new String();
// 创建一个内容为abcd的字符串
String str2 = new String("abcd");
// 创建一个内容为字符数组的字符串
char[] charArray = new char[] { 'D', 'E', 'F' };
String str3 = new String(charArray);
// 创建一个内容为字节数组的字符串
byte[] arr = {97,98,99};
String str4 = new String(arr);
System.out.println("a" + str1 + "b");
System.out.println(str2);
System.out.println(str3);
System.out.println(str4);
}
}
运行结果→
ab
abcd
DEF
abc
5.1.2 String类的常见操作
方法声明 | 功能描述 |
int indexOf(int ch) | 返回指定字符ch在字符串中第一次出现位置的索引 |
int lastlndexOf(int ch) | 返回字符ch在字符串中最后一次出现位置的索引 |
int indexOf(String str) | 返回指定子字符串str在字符串第一次出现位置的索引 |
int lastlndexOf(String str) | 返回指定子字符串str在此字符串中最后一次出现位置的索引 |
char charAt(int index) | 返回字符串index位置上的字符,其中index的取值范围是0~(字符串长度-1) |
Boolean endsWith(String suffix) | 判断此字符串是否以指定的字符串结尾 |
int length() | 判断此字符串的长度 |
boolean equals(Object anObject) | 将此字符串与指定的字符串比较 |
boolean isEmply() | 判断字符串长度是否为0,如果为0,则返回ture;反之,则返回为false |
boolean startsWith(String prefix) | 判断此字符串是否以指定的字符串开始 |
boolean contains(CharSrquence cs) | 判断此字符串中是否包含指定的字符序列 |
String toLowerCase() | 使用默认语言环境的规则将String中的所有字符都转换为小写字母 |
String toUpperCase() | 使用默认语言环境的规则将String中的所有字符都转换为大写字母 |
static String valueOf(int i) | 将int变量i转换为一个字符数组 |
String replace(CharSequence oldstr,CharSequence newstr) | 返回一个新的字符串,它是通过用newstr替换此字符串出现的所有oldstr得到的 |
String[]split(String regex) | 根据参数regex将原来的字符串分割为若干个子字符串 |
String substring(int beginlndex) | 返回一个新字符串,它包含从指定的beginlndex处开始,直到此字符串末尾的所有字符 |
String substring(int beginlndex,int endlndex) | 返回一个新字符串,它包含从指定的beginlndex处开始,直到索引endlndex-1处的所有字符 |
String trim() | 返回一个新字符串,它去除了原字符串首尾的空格 |
1.字符串的获取功能
案例学习5-2
public class Example01 {
public static void main(String[] args) throws Exception {
// 创建一个空的字符串
String str1 = new String();
// 创建一个内容为abcd的字符串
String str2 = new String("abcd");
// 创建一个内容为字符数组的字符串
char[] charArray = new char[] { 'D', 'E', 'F' };
String str3 = new String(charArray);
// 创建一个内容为字节数组的字符串
byte[] arr = {97,98,99};
String str4 = new String(arr);
System.out.println("a" + str1 + "b");
System.out.println(str2);
System.out.println(str3);
System.out.println(str4);
}
}
2.字符串的转换操作
案例学习5-3
public class Example03 {
public static void main(String[] args) {
String str = "abcd";
System.out.print("将字符串转为字符数组后的结果:");
char[] charArray = str.toCharArray(); // 字符串转换为字符数组
for (int i = 0; i < charArray.length; i++) {
if (i != charArray.length - 1) {
// 如果不是数组的最后一个元素,在元素后面加逗号
System.out.print(charArray[i] + ",");
} else {
// 数组的最后一个元素后面不加逗号
System.out.println(charArray[i]);
}
}
System.out.println("将int值转换为String类型之后的结果:" +
String.valueOf(12));
System.out.println("将字符串转换成大写之后的结果:" +
str.toUpperCase());
System.out.println("将字符串转换成小写之后的结果:" +
str.toLowerCase());
}
}
3.字符串的替换和去除空格操作
案例学习5-4
public class Example04 {
public static void main(String[] args) {
String s = "itcast";
// 字符串替换操作
System.out.println("将it替换成cn.it的结果:" + s.replace("it",
"cn.it"));
// 字符串去除空格操作
String s1 = " i t c a s t ";
System.out.println("去除字符串两端空格后的结果:" + s1.trim());
System.out.println("去除字符串中所有空格后的结果:" + s1.replace(" ",
""));
}
}
4.字符串的判断操作
案例学习5-5
public class Example05 {
public static void main(String[] args) {
String s1 = "String"; // 声明一个字符串
String s2 = "Str";
System.out.println("判断是否以字符串Str开头:" +
s1.startsWith("Str"));
System.out.println("判断是否以字符串ng结尾:" + s1.endsWith("ng"));
System.out.println("判断是否包含字符串tri:" + s1.contains("tri"));
System.out.println("判断字符串是否为空:" + s1.isEmpty());
System.out.println("判断两个字符串是否相等" + s1.equals(s2));
}
}
5.字符串的截取和分割
案例学习5-6
public class Example06 {
public static void main(String[] args) {
String str = "石家庄-武汉-哈尔滨";
// 下面是字符串截取操作
System.out.println("从第5个字符截取到末尾的结果:" +
str.substring(4));
System.out.println("从第5个字符截取到第6个字符的结果:" +
str.substring(4, 6));
// 下面是字符串分割操作
System.out.print("分割后的字符串数组中的元素依次为:");
String[] strArray = str.split("-"); // 将字符串转换为字符串数组
for (int i = 0; i < strArray.length; i++) {
if (i != strArray.length - 1) {
// 如果不是数组的最后一个元素,在元素后面加逗号
System.out.print(strArray[i] + ",");
} else {
// 数组的最后一个元素后面不加逗号
System.out.println(strArray[i]);
}
}
}
}
注:字符串角标越界异常~
String字符串在获取某个字符时会用到字符的索引,当访问字符串中的字符时,如果字符的索引不存在,则会发生StringIndexOutOfBoundsRxception(字符串角标越界异常)
案例演示异常5-7
public class Example07 {
public static void main(String[] args) {
String s = "itcast";
System.out.println(s.charAt(8));
}
}
运行结果→
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 8
at java.base/java.lang.StringLatin1.charAt(StringLatin1.java:48)
at java.base/java.lang.String.charAt(String.java:1512)
at Medo.exple.main(exple.java:7)
通过运行结果来看,访问字符串中的字符时,不能超过字符的索引范围,否则会出现异常,这与数字中的角标越界异常非常相似