Java常用类03:String类
String类是final修饰的,不可变长的类
字符串的存储和创建
字符串是常量,创建之后不可改变。字符串字面值存储在常量池中(方法区),可以共享
public class Hello {
public static void main(String[] args) {
//创建字符串的两种方式
String s1 = "java"; //这种方式,会在常量池中创建一个字符串,可以共享
String s2 = new String("java"); //这种方式,会同时在堆和常量池创建两个字符串
String s3 = "java";
System.out.println(s1 == s2); //false,==用于比较两个字符串引用是否指向同一个对象,显然s1和s2不一样
System.out.println(s1 == s3); //true,因为常量池已经有了一个"java",故指向同一个常量
System.out.println(s1.equals(s2)); //true,equals用于比较两个字符串对象的值是否相等,一般我们的目的就是这个,因此推荐只使用equals()方法(String类重写了Object类的equals()方法,因此对于字符串来说,内容相同就相同)
}
}
//String s1 = "abc",本质上其实是先生成一个字符数组,再将其转换为字符串 char[] data = {'a', 'b', 'c'}; String str = new String(data);
valueOf()方法
public class Hello {
public static void main(String[] args) {
char[] data = {'1', '2'};
//String.valueOf()方法和new String()对象,都可以将其他数据类型转换为字符串
//注意Arrays.toString()是完整的打印出数组,并不能得到想要的字符串
//copyValueOf()只能将字符数组转换为字符串,功能不如valueOf()多
System.out.println(String.valueOf(data));
System.out.println(new String(data));
}
}
length()、toCharArray()、contains()方法
import java.util.Arrays;
public class Hello {
public static void main(String[] args) {
String a = "Java是最好的编程语言";
System.out.println(a.length()); //获取字符串的长度
System.out.println(Arrays.toString(a.toCharArray())); //[J, a, v, a, 是, 最, 好, 的, 编, 程, 语, 言],将字符串还原成字符数组
System.out.println(a.contains("Java")); //判断当前字符串中是否包含某字符串
}
}
charAt()、indexOf()、lastIndexOf()方法
public class Hello {
public static void main(String[] args) {
String a = "Java是最好的编程语言";
System.out.println(a.charAt(2)); //根据下标获取字符。不同于python,字符串中的字符索引不能直接通过for循环获取,只能使用charAt()方法获取
System.out.println(a.indexOf("a")); //查找字符首次出现的下标
System.out.println(a.lastIndexOf("a")); //查找字符最后一次出现的下标
}
}
toUpperCase()、endsWith()、compareTo()方法
public class Hello {
public static void main(String[] args) {
String a = "Java";
System.out.println(a.toUpperCase()); //字符串转大写
System.out.println(a.toLowerCase()); //字符串转小写
String file = "Hello.java";
System.out.println(file.endsWith("java")); //判断字符串是否以什么结尾
System.out.println(file.startsWith("H")); //判断字符串是否以什么开头
String s1 = "hello";
String s2 = "HELLO";
System.out.println(s1.compareTo(s2)); //32,两个字符串中第一个不相等字符的Unicode编码之差
System.out.println("abc".compareTo("abcdef")); //-3,如果前面的部分完全相同,那就是比较长度差
}
}
trim()、replace()、split()、substring()方法
import java.util.Arrays;
public class Hello {
public static void main(String[] args) {
String a = " Python 是最好的编程语言 ";
System.out.println(a.trim()); //去掉字符串首尾的空格
System.out.println(a.replace("Python", "Java")); //替换字符串
String s = "Java 是最好的++编程语言";
System.out.println(Arrays.toString(s.split(" "))); //[Java, 是最好的++编程语言],以空格为分隔符
System.out.println(Arrays.toString(s.split("[ +]"))); //[Java, 是最好的, , 编程语言],如果有多种分隔符,用[]括起来
System.out.println(Arrays.toString(s.split("[ +]+"))); //[Java, 是最好的, 编程语言],如果分隔符可能连续出现多次,在[]外再加上+号
System.out.println(Arrays.toString(s.split(""))); //如果分隔符不填,默认是每个字符都分割,和toCharArray()方法效果一样
System.out.println(Arrays.toString(s.toCharArray()));
String str = "this is a text";
String[] s1 = str.split(" ");
for (String ss : s1){
char first = Character.toUpperCase(ss.charAt(0)); //将每个单词的首字母大写,借助包装工具类
System.out.print(first + ss.substring(1) + " "); //substring()方法可以截取指定位置以后的字符串,将首字母和后面的部分拼接
}
}
}