目录
一.认识 String 类
二.常用方法
1.字符串构造(定义)
2.字符串指为空和null
3.String对象的比较
(1)equals和==的区别
(2)compareTo比较
4.字符串查找
5.字符串转化
(1)数值和字符串转化
(2)大小写转换
(3)字符串数组互转
6.字符串的不可变性
7.字符串的其他操作
三.StringBuilder和StringBuffer
想必大家在学习c语言的时候已经涉及到了字符串了,但是在c语言中字符串只能使用字符数组或者字符指针,可以用库函数完成大部分操作。但是这种将数据和操作数据方法分离开的方式不符合面相对象的思想,而字符串应用又非常广泛,因此Java语言专门提供了String类。接下来我带讲一下java中的String类,希望对大家有所帮助。
String类提供的构造方式非常多,常用的就以下三种:
public static void main(String[] args) {
// 使用常量串构造
String s1 = "hello bit";
System.out.println(s1);
// 直接newString对象
String s2 = new String("hello bit");
System.out.println(s1);
// 使用字符数组进行构造
char[] array = {'h','e','l','l','o','b','i','t'};
String s3 = new String(array);
System.out.println(s1);
}
注意:区别与c语言,java中的字符串没有以 \0 结尾的说法。
大家注意下面代码,我会通过代码解释
public static void main(String[] args) {
//字符串为空
String str1 = "";
System.out.println(str1.isEmpty());//判断字符串是不是空的
//字符串指向null,str2这个引用 不指向任何的对象,下面判断为空的时候会报错
String str2 = null;
System.out.println(str2.isEmpty());
}
所以我们可以知道字符串为空和字符串=null不是一个概念。
如果是new一个字符串的话 比较字符串里面的值是否相同用 引用1.equals(引用2),判断两个字符串地址是否相同用 引用1 == 引用2。
public static void main(String[] args) {
String str1 = new String("abcd");
String str2 = new String("abcde");
System.out.println(str1 == str2);//flase
System.out.println(str1.equals(str2));//true
}
如果是直接赋值的话用==也能判断字符串的值是否相同(这里会涉及到哈希值,由于小编现在能力有限,等以后会再讲解)
public static void main(String[] args) {
String str3 = "abcd";
String str4 = "abcde";
System.out.println(str3 == str4);//ture 字符串常量池 有哈希表的基础
}
(这里注意:如果str1和str2里面的内容相同的话,如都是abc,在常量池中只会存一个abc)
public static void main3(String[] args) {
String str1 = "abcd";
String str2 = "abcdef";
//str1大于str2 那么 返回正数 如果不大于 返回负数 如果相同 返回0
System.out.println(str1.compareTo(str2));//-2
/**
* 比较逻辑:
* 1. 如果两个字符串的长度是一样的,那么第一个不一样的字符的大小就是整个字符串的大小
* 2. 如果两个字符串长度不一样,那么先比较两个长度的差值个
* 3、在这个差值范围内,有不一样的字符就能比较出来大小
* 4、但是如果都是一样的,那么就看谁长 谁大 !
*/
}
忽略大小写比较:
public static void main4(String[] args) {
String str1 = "Abcd";
String str2 = "abcd";
//忽略大小写进行 比较
System.out.println(str1.compareToIgnoreCase(str2));//0
}
public static void main(String[] args) {
String str1 = "abcdef";
//获取指定位置的字符
char ch = str1.charAt(2);//c
System.out.println(ch);
//从3的位置找c开始出现的位置,没有返回-1
int index = str1.indexOf('c',3);
System.out.println(index);//-1
String str2 = "ababcdabcdef";
//从5开始 从后往前找a出现的位置
int index2 = str2.lastIndexOf('a',5);
System.out.println(index2);//2
}
public static void main(String[] args) {
// 数字转字符串
String s1 = String.valueOf(1234);
String s2 = String.valueOf(12.34);
String s3 = String.valueOf(true);
String s4 = String.valueOf(new Student("Hanmeimei", 18));
// 字符串转数字
// 注意:Integer、Double等是Java中的包装类型,这个后面会讲到
int data1 = Integer.parseInt("1234");
double data2 = Double.parseDouble("12.34");
}
public static void main(String[] args) {
String s1 = "hello";
String s2 = "HELLO";
// 小写转大写
System.out.println(s1.toUpperCase());
// 大写转小写
System.out.println(s2.toLowerCase());
}
public static void main(String[] args) {
String s = "hello";
// 字符串转数组
char[] ch = s.toCharArray();
for (int i = 0; i < ch.length; i++) {
System.out.print(ch[i]);
}
// 数组转字符串
String s2 = new String(ch);
System.out.println(s2);
}
String是一种不可变对象. 字符串中的内容是不可改变,字符串不可被修改。
所有涉及到可能修改字符串内容的操作都是创建一个新对象,改变的是新对象,如:
1.字符串的指定字符的转化,转化的时候是新new一个对象进行转化
2.字符串的相加,也是new一个对象进行相加,不是在原来的对象中进行相加
由于String的不可更改特性,为了方便字符串的修改,Java中又提供StringBuilder和StringBuffer类。这两个类大部分功能是相同的,这里介绍 StringBuilder常用的一些方法,其它需要用到了大家可参阅Java Platform SE 8