1. “hello”.length() 直接获取String类型对象的长度
一,字符串构造
1.使用常量串构造
String s1="hello bit";
2.直接newString对象(引用类型)
String s2=new String("hello bit");
3.使用字符数组
char[]array={'h','e','l','l','o','b','i','t};
String s3=new String(array);
注意:
1. String是引用类型,内部并不存储字符串本身
2. 在Java中“”引起来的也是String类型对象。
二,String对象的比较
1. ==比较是否引用同一个对象
对于基本类型,==比较的是变量中的值;
int a = 10;
int b = 20;
int c = 10;System.out.println(a == b); // false
System.out.println(a == c); // true
对于引用类型==比较的是引用中的地址。
String s1 = new String("hello");
String s2 = new String("hello");
String s3 = new String("world");
String s4 = s1;
System.out.println(s1 == s2); // false
System.out.println(s2 == s3); // false
System.out.println(s1 == s4); // true
2. equals方法(返回boolean)
按照字典序(字符大小的顺序)排序
String s1 = new String("hello");
String s2 = new String("hello");
String s3 = new String("Hello");System.out.println(s1.equals(s2)); // true
System.out.println(s1.equals(s3)); // false
Object中equals默认按照==比较,String重写equals方法后比较内容是否一样
String重写过程:
public boolean equals(Object anObject) {
// 1. 先检测this 和 anObject 是否为同一个对象比较,如果是返回true
if (this == anObject) {
return true;
}
// 2. 检测anObject是否为String类型的对象,如果是继续比较,否则返回false
if (anObject instanceof String) {
// 将anObject向下转型为String类型对象
String anotherString = (String)anObject;
int n = value.length;
// 3. this和anObject两个字符串的长度是否相同,是继续比较,否则返回false
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
// 4. 按照字典序,从前往后逐个字符进行比较
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
3.compareTo方法 (返回int)
1. 先按照字典次序大小比较,如果出现不等的字符,直接返回这两个字符的大小差值
2. 如果前k个字符相等(k为两个字符长度最小值),返回值两个字符串长度差值
String s1 = new String("abc");
String s2 = new String("ac");
String s3 = new String("abc");
String s4 = new String("abcdef");
System.out.println(s1.compareTo(s2)); // 不同输出字符差值-1
System.out.println(s1.compareTo(s3)); // 相同输出 0
System.out.println(s1.compareTo(s4)); // 前k个字符完全相同,输出长度差值 -3
4. compareToIgnoreCase方法
与comperTo方法相同,区别在于忽略大小写变化
String s1 = new String("abc");
String s2 = new String("ac");
String s3 = new String("ABc");
String s4 = new String("abcdef");
System.out.println(s1.compareToIgnoreCase(s2)); // 不同输出字符差值-1
System.out.println(s1.compareToIgnoreCase(s3)); // 相同输出 0
System.out.println(s1.compareToIgnoreCase(s4)); // 前k个字符完全相同,输出-3
三,字符串查找(indexOf)
实例方法
String s1="hello";
//当没有找到时返回-1
查找对应位置的字符
s1.charAt(0); // h
查找第一次出现的字符的位置
s1.indexOf('h');// 0
查找确定位置后,所求字符的位置
s1.indexOf('o',1);// 4
查找字符串的位置
s1.indexOf("ll");// 2
从后往前找第一次字符出现的位置
s1.lastindexOf('o');// 4
s1.lastindexOf('e',3);// 1
四,字符串转化
1.数值和字符串转化(String.valueOf)(integer.parseInt...)
数字等转字符串
String.valueOf();
String s1 = String.valueOf(123); //123
String s2 = String.valueOf(12.5); //12.5
String s4 = String.valueOf(new Student("Hanmeimei", 18));//子类需要重写toString方法
字符串转其他类型
(包装类型).parse(对应类型)(需要转换的部分);
需要使用java中的包装类型
int data1 = Integer.parseInt("1234");
double data2 = Double.parseDouble("12.34");
2.大小写转换(toUpeerCase)(toLowerCse)
s1.toUpperCase();转大写
s1.toLowerCase();转小写
String s1 = "hello";
String s2 = "HELLO";
// 小写转大写
System.out.println(s1.toUpperCase());
// 大写转小写
System.out.println(s2.toLowerCase());
3.字符串转数组(toCharArray)
(1)字符串转数组
String s = "hello";
char[] ch = s.toCharArray();
for (int i = 0; i < ch.length; i++) {
System.out.print(ch[i]);
}
(2)数组转字符串
String s2 = new String(ch);
System.out.println(s2);
4.格式化(format)
String s = String.format("%d-%d-%d", 2019, 9,14);
System.out.println(s);//2019-9-14
五,字符串替换(replace)
String s1="abcabcabc";
String ret1=s1.replace('a','T');//TbcTbcTbc
//把a换成T
String ret2=s1.replace("ab","TT");//TTcTTcTTc
String ret3=s1.replaceAll("ab","TT");//TTcTTcTTc
//把ab换成TT
String ret3=s1.replaceFirst("ab","TT");//TTcabcabc
//只替换第一个ab
六,字符串拆分(split)
String s1="abab abab abab";
String[] ret=s1.split(" ");
//按空格拆分
//abcd
//abcd
//abcd
String[] ret=s1.split(" ",2);
//最多拆分2组
//abcd
//abcd abcd
1.特殊字符的转义
1. 字符 "|", "*" ,"+" 都得加上转义字符,前面加上 "\\" .
2. 而如果是 "\" ——>"\\" ,"\\"——>"\\\\"
String s1="123\\123\\123";
char[] tel=s1.split("\\\\");
fot(String s:ret){
System.out.println(s);
}
3. 如果一个字符串中有多个分隔符,可以用"|"作为连字符.
s1.split(" |&");\\按照空格" "和"&"拆分
2.多次拆分
String s1 = "name=zhangsan&age=18" ;
String[] ret1= s1.split("&") ;
for (int i = 0; i < ret1.length; i++) {
String[] ret2 = ret1[i].split("=") ;
for(String s:ret2){
System.out.println(s);
}
System.out.println();
}
//第一次拆分
name=zhangsan
age=18
//第二次拆分
name
zhangsan
age
18
七,字符串截取(substring)
String s1 = "helloworld" ;
System.out.println(s1.substring(5));//world
System.out.println(s1.substring(0, 5));//hello 左闭又开
八,StringBuilder和StringBuffer介绍
StringBuff append(String str)
在尾部追加
char charAt(int index)
获取index位置的字符
int length()
获取字符串的长度
int capacity()
获取底层保存字符串空间总的大小
void setCharAt(int index,char ch)
将index位置的字符设置为ch
int indexOf(String str)
返回str第一次出现的位置