目录
int indexOf(int ch, intfromIndex):
int indexOf(String str, intfromIndex):
int lastIndexOf(int ch, intfromIndex):
String类
String表示字符串类型,属于 引用数据类型,不属于基本数据类型。
String str = "hello";//没有\0结尾,存的是这个对象"hello"的地址,也是实例化对象
System.out.println(str);//String一定会重写toString方法
注意
1.为什么 System.out.println(引用) 会自己自动调用toString()方法?
因为println()会调用String.valueOf()方法而String.valueOf()会调用toString()方法
下面是实例化:
String str1 = new String();//任何一种类型都得调用自己的构造方法来实例化我们当前的对象
System.out.println(str1);
String str2 = new String("a");//也是实例化对象
System.out.println(str2);
char[] array = {'a', 'b', 'c'};
String str3 = new String(array, 0, 1);
//这样把一个字符数组转化成一个字符串了,也是实例化对象
// 从0位置偏移1,拿了一个a,也可以从1开始偏移
System.out.println(str3);
然后是String类的一些方法
String s4 = "";//当前s4这个引用所指向的对象是空的,里面的字符是0
System.out.println(s4.length());
System.out.println(s4.isEmpty());
//用于检查字符串是否为空,即它的长度是否为 0如果字符串长度为0,返回true,否则返回false
String s4 = "";//当前s4这个引用所指向的对象是空的,里面的字符是0
System.out.println(s4.length());
System.out.println(s4.isEmpty());
//用于检查字符串是否为空,即它的长度是否为 0如果字符串长度为0,返回 true,否则返回false
String s5 = null;//当前s5这个引用不指向任何对象
//System.out.println(s5.length());
System.out.println(s5.isEmpty());
compareTo和equals
String s1 = new String("hello");
String s2 = new String("abc");
System.out.println(s1.equals(s2));//比较内容,返回值是true或者false
//如果 s1 > s2 返回正数
//如果 s1 == s2 返回0
//如果 s1 < s2 返回负数
//如果前面都一样,就比长度,不一样比较大小,不忽略大小写
System.out.println(s1.compareTo(s2));
compareToIgnoreCase
String s1 = new String("abc");
String s2 = new String("Abc");
System.out.println(s1.compareToIgnoreCase(s2));//忽略大小写
字符串查找
char charAt(int index):
String s1 = "hello";
char ch = s1.charAt(2);//想拿哪个就填对应的下标
System.out.println(ch);
String s1 = "hello";
for (int i = 0; i < s1.length(); i++) {
char ch = s1.charAt(i);//想拿哪个就填对应的下标
System.out.println(ch);
}
int indexOf(int ch):
String s1 = "hello";
int index = s1.indexOf('e');//打印字符的下标
System.out.println(index);
int indexOf(int ch, intfromIndex):
String s1 = "hello";
int index = s1.indexOf("l",3);//从指定下标开始找
System.out.println(index);
int indexOf(String str):
String s1 = "hello";
int index = s1.indexOf("ell");//跟上面意思差不多
System.out.println(index);
int indexOf(String str, intfromIndex):
String s1 = "hellohello";
int index = s1.indexOf("ell",5);
System.out.println(index);
int lastIndexOf(int ch):
String s1 = "hellohello";
int index = s1.lastIndexOf('o');//倒着找
System.out.println(index);
int lastIndexOf(int ch, intfromIndex):
String s1 = "hellohello";
int index = s1.lastIndexOf('o',6);//倒着找
System.out.println(index);
所有的查找的例子:
public static void main(String[] args) {
String s = "aaabbbcccaaabbbccc";
System.out.println(s.charAt(3)); // 'b'
System.out.println(s.indexOf('c')); // 6
System.out.println(s.indexOf('c', 10)); // 15
System.out.println(s.indexOf("bbb")); // 3
System.out.println(s.indexOf("bbb", 10)); // 12
System.out.println(s.lastIndexOf('c')); // 17
System.out.println(s.lastIndexOf('c', 10)); // 8
System.out.println(s.lastIndexOf("bbb")); // 12
System.out.println(s.lastIndexOf("bbb", 10)); // 3
字符串转化
1.数值和字符串转化:
String s = String.valueOf(19.9);
System.out.println(s);//输出类型为19.9的字符串
int data1 = Integer.parseInt("1234");
double data2 = Double.parseDouble("12.34");
System.out.println(data1);//输出类型为整形
System.out.println(data2);
2. 大小写转换:
String s1 = "hello";
String ret = s1.toUpperCase();
//转变为大写 不是在原来的基础上 转变 是转变大写后是一个新的对象
System.out.println(s1.toUpperCase());
// 大写转小写
System.out.println(s2.toLowerCase());
3. 字符串转数组:
String s = "hello";
// 字符串转数组
char[] ch = s.toCharArray();
for (int i = 0; i < ch.length; i++) {
System.out.print(ch[i]);
}
System.out.println();
// 数组转字符串
String s2 = new String(ch);
System.out.println(s2);
数组转字符串:
char[] array = {'1', '2', '3'};
String s = new String(array);
System.out.println(s);
4.格式化:
String s = String.format("%d-%d-%d", 2019, 9,14);
System.out.println(s);
字符串替换
字符串拆分
拆分是特别常用的操作. 一定要重点掌握. 另外有些特殊字符作为分割符可能无法正确切分, 需要加上转义
拆分IP地址:
注意事项:
1. 字符"|","*","+"都得加上转义字符,前面加上 "\\" .
2. 而如果是 "\\" ,那么就得写成 "\\\\" .
3. 如果一个字符串中有多个分隔符,可以用"|"作为连字符.
多次拆分:
字符串截取
注意事项:
1. 索引从0开始
2. 注意前闭后开区间的写法, substring(0, 5) 表示包含 0 号下标的字符, 不包含 5 号下标
字符串的不可变性
所有涉及到可能修改字符串内容的操作都是创建一个新对象,改变的是新对象
都是产生了新的对象,而不是对原来的对象进行修改,不是因为final,是因为私有的
final修饰类表明该类不想被继承,final修饰引用类型表明该引用变量不能引用其他对象,但是其引用对象中的内容是可以修改的