我们知道在Java中两个引用遍历是不能用" == "号来比较的,而String类重写了父类objects的equals方法, 实现了引用类型的比较
例子
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
String str1 = "hello world";
String str2 = "hello world";
String str3 = "hello xiao_yu_er";
// equals方法返回值是boolean类型,相等返回true,不等返回false
System.out.println(str1.equals(str2)); // true
System.out.println(str1.equals(str3)); // false
}
}
除了equals,String还为我们提供了一些其他的字符串比较方法
compareTo方法:按照字典序进行比较
与equals不同的是,equals返回的是boolean类型,而compareTo返回的是int类型。具体比较方式:
1. 先按照字典次序大小比较,如果出现不等的字符,直接返回这两个字符的大小差值
2. 如果前k个字符相等(k为两个字符长度最小值),返回值两个字符串长度差值
例子
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
String str1 = "hello a";
String str2 = "hello z";
String str3 = "hello anna";
// 返回类型是int,前几个字符都相同,最后一个不同——返回'a'和'z'字符的Ascii码的差值
System.out.println(str1.compareTo(str2)); // -25
// str1所有的字符和str3都相同,但str3多了几个不同的字符,返回值str1和str3两个字符串长度差值
System.out.println(str1.compareTo(str3)); // -3
}
}
compareToIgnoreCase:与compareTo方式相同,但是忽略大小写比较
方法功能carAt(int index)
返回index位置上字符,如果index为负数或者越界,抛出IndexOutOfBoundsException异常
indexOf(String str返回str第一次出现的位置,没有返回-1
lastIndexOf(String str)
从后往前找,返回str第一次出现的位置,没有返回-1
例子
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
String str1 = "hello world!";
char ch = str1.charAt(0); // 获取0下标的字符
System.out.println("该字符串中0下标的字符为:" + ch);
int index1 = str1.indexOf("l"); // 记录字符串”l“在str1中第一次出现的位置,从前往后找,没有返回-1
System.out.println("从前往后找,字符串”l“第一次出现的位置是:" + index1);
int index2 = str1.lastIndexOf("l"); // 从后往前找,返回“l”第一次出现的位置,没有返回-1
System.out.println("从后往前找,字符串“l”第一次出现的位置是:" + index2);
}
}
方法介绍都在代码中:
import java.util.Locale;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// 数字和字符串之间的转换
String str1 = String.valueOf(1234); // 将数字1234转换成字符串"1234"
double date1 = Double.parseDouble("76.2"); // 将字符串"76.2"转换成double类型的数字:76.2
System.out.println(str1);
System.out.println(date1);
// 大小写转换
String s1 = "XIAO YU ER";
String s2 = "student";
String s3 = s1.toLowerCase(); // 大写转小写
System.out.println("大写转小写的转换结果是:" + s3);
System.out.println("小写转大写的转换结果是:" + s2.toUpperCase()); // 小写转大写
// 字符串和字符数组之间的转换
String str2 = "hello word";
char[] ch1 = str2.toCharArray(); // 字符串转字符数组
for (char tmp:
ch1) {
System.out.print(tmp + " ");
}
System.out.println("======我是分割线=======");
char[] ch2 = new char[]{'a','b', 'c', 'd', 'e'};
String str3 = new String(ch2); // 字符数组转字符串
System.out.println("字符数组转字符串的转换结果是:" + str3);
}
使用一个指定的新的字符串替换掉已有的字符串数据,可用的方法如下
方法功能(返回类型是String) replaceAll(String regex, String replacement)替换所有的指定内容(返回类型是String) replaceFirst(String regex, String replacement)替换首个内容
例子
public class String_method_Test {
public static void main(String[] args) {
String str1 = "hello world!";
System.out.println("替换全部的”l“后的结果是:" + str1.replaceAll("l", "*"));
System.out.println("替换掉第一个”l“后的结果是:" + str1.replaceFirst("l", "&"));
}
}
注意事项: 由于字符串是不可变对象, 替换不修改当前字符串, 而是产生一个新的字符串
可以将一个完整的字符串按照指定的分隔符划分为若干个子字符串
方法功能split(String regex) (返回值的类型:String[] )将字符串全部拆分split(String regex, int limit) (返回值的类型:String[] )将字符串以指定的格式,拆分为limit组
例子
public class String_method_Test {
public static void main(String[] args) {
String str1 = "hello xiao yu";
String[] s1 = str1.split(" "); // 以空格,来进行全部拆分
for (String tmp :
s1) {
System.out.println(tmp);
}
System.out.println("=====我是分割线======");
String[] s2 = str1.split(" ", 2); // 按空格,拆分为两组
for (int i = 0; i < s2.length; ++i) {
System.out.println(s2[i]);
}
}
}
拆分是特别常用的操作. 一定要重点掌握. 另外有些特殊字符作为分割符可能无法正确切分, 需要加上转义.
例子: 拆分IP地址
public class String_method_Test {
public static void main(String[] args) {
String str1 = "127.0.0.1";
String[] s = str1.split("\\."); // 注意一定要加上转义字符
for (int i = 0; i < s.length; ++i) {
System.out.println(s[i]);
}
System.out.println("====我是分割线====");
String str2 = "name=小鱼儿&age=19";
String[] s2 = str2.split("&");
// 多次拆分
for (int i = 0; i < s2.length; ++i) {
String[] tmp = s2[i].split("=");
for (int j = 0; j < tmp.length; ++j) {
System.out.println(tmp[j]);
}
}
}
}
注意事项:
1. 字符"|","*","+"都得加上转义字符,前面加上 "\\" .
2. 而如果是 "\" ,那么就得写成 "\\\\" .
3. 如果一个字符串中有多个分隔符,可以用"|"作为连字符
从一个完整的字符串之中截取部分内容:
方法功能String substring(int beginIndex)从指定索引截取到结尾String substring(int beginIndex, int endIndex)截取部分内容
例子
public class String_method_Test {
public static void main(String[] args) {
String str1 = "hello xiaoyu";
// 从指定索引截取到结尾
String s1 = str1.substring(6);
System.out.println(s1);
// 截取部分内容
String s2 = str1.substring(6, 10);
System.out.println(s2);
}
}
注意事项:
1. 索引从0开始
2. 注意前闭后开区间的写法, substring(0, 5) 表示包含 0 号下标的字符, 不包含 5 号下标
其他一些操作方法
方法功能String trim()去掉字符串中的左右空格,保留中间空格String toUpperCase()字符串转大写String toLowerCase()字符串转小写
trim 会去掉字符串开头和结尾的空白字符(空格, 换行, 制表符等)