Java中的字符串学习
•字符串替换
三种方法
1.public String replace()--------旧字符序列换成新字符序列
2.public String replaceAll()--------将旧字符串或正则表达式内容,替换成新字符串
3.public String replaceFirst()--------替换一次
将旧字符串替换成新字符串
语法
public String replace(CharSequence target,CharSequence replacement)
target----------旧字符序列
replacement----------替换后的新字符序列
示例
String str = "馒头一文一个";
String replaceStr = str.replace("一","壹");
代码运行
public class demo1 {
public static void main(String[] args) {
String str="馒头一文一个";
String replaceStr=str.replace("一","壹");
System.out.println(replaceStr);
}
}
•字母大小写转换
将字符串变成大写
语法
public String toUpperCase()
将字符串变成小写
语法
public String toLowerCase()
示例
String str = "abc DEF";
String strLow = str.toLowerCase();
String strUp = str.toUpperCase();
代码运行
public class demo2 {
public static void main(String[] args) {
String str = "abc EDF";
String toLow = str.toLowerCase();
String toUp = str.toUpperCase();
System.out.println(toLow);
System.out.println(toUp);
}
}
•判断字符串的开始与结尾
判断字符串结尾内容
语法
public boolean endsWith(String suffix)
suffix--------要对比的字符串
示例
String fileName = "HelloWorld.java";
Boolean bool1 = fileName.endsWith(".java");
Boolean bool2 = fileName.endWith(".jpg");
代码运行
public class demo3 {
public static void main(String[] args) {
String a = "HelloWorld.java";
Boolean bool1 = a.endsWith(".java");
Boolean bool2 = a.endsWith(".jpg");
System.out.println("bool1 = "+bool1);
System.out.println("bool2 = "+bool2);
}
}
判断字符串首句内容
语法
public boolean startsWith(String prefix)
prefix--------要对比的字符串
示例
String str = "新华社记者从前往发来报道....";
Boolean bool1 = str.startsWith("新华社");
Boolean bool2 = str.startsWith("新华书店");
代码运行
public class demo4 {
public static void main(String[] args) {
String str = ("新华社记者从前往发来报道........");
Boolean bool1 = str.startsWith("新华社");
Boolean bool2 = str.startsWith("新华书店");
System.out.println("bool1 = "+bool1);
System.out.println("bool2 = "+bool2);
}
}
•判断字符串是否相等
判断用户名是否相等
代码运行
public class demo5 {
public static void main(String[] args) {
String name = new String ("tom");
String dbValue = new String("tom");
System.out.println(name==dbValue);
}
}
为什么会不相等?
用new方法创建了两个字符串,这两个字符串对象的值都会保存在内存的栈堆中,首先我们创建了name和dbValue两个引用,用new方法在堆中创建了String的对象实体,并让两个引用指向各自的对象实体,然后这两个对象实体又会分别在栈中创建字符串的自命值内容。name和dbValue始终指向的是两个独立的内存区域,由于==判断的是内存地址,两个内存地址不同的对象比较起来肯定就是false。
如何判断字符串内容是否相等
语法
public boolean equals(String anotherString)
anotherString---------被比较的字符串
示例
String name = new String("tom");
String dbValue = new String("tom");
boolean bool = name.equals(dbValue);
代码运行
public class demo6 {
public static void main(String[] args) {
String name = new String("tom");
String dbValue = new String("tom");
System.out.println(name.equals(dbValue));
}
}
忽略大小写比较
语法
public boolean equalslgnoreCase(String anotherString)
anotherString--------被比较的字符串
示例
String str1 = new String("abc");
String str2 = new String("ABC");
Boolean bool = str1.equalslgnoreCase(str2);
代码运行
public class demo7 {
public static void main(String[] args) {
String str1 = new String("abc");
String str2 = new String("ABC");
System.out.println(str1==str2);
System.out.println(str1.equals(str2));
System.out.println(str1.equalsIgnoreCase(str2));
}
}
特殊情况
如果是用引用字符串常量的方法创建字符串,虽然还是保存在栈堆,保存的方式和以前有所不同。用name引用字符串常量tom的时候,Java虚拟机在栈中的常量区中创建tom这个字符串常量,自动创建一个匿名的字符串对象指向tom,将匿名字符串对象的地址交给name引用,当我们让dbValue也引用字符串常量tom的时候,Java虚拟机会先到栈中的常量区里查找是否有相同的字符串常量,结果发现有相同的常量,就直接把这个常量的匿名对象交给了dbValue引用,这样name和dbValue就是指向同一个匿名对象了,这样用双等号比较的时候,返回结果就是true。