目录
6:大小写:toLowerCase()全部变小写,toUpperCase()全部变大写
7:定位:indexOf 判断字符或者子字符串出现的位置,contains 是否包含子字符串
8:替换:replaceAll替换所有,replaceFirst只替换一个
六:字符串
1,创建字符串(三种方法)
————(1)每当有一个字面值出现的时候,虚拟机就会创建一个字符串
————(2)调用String的构造方法创建一个字符串对象
————(3)通过+进行字符串拼接也会创建新的字符串对象
public static void main(String[] args) {
String garen ="姜山"; //字面值,虚拟机碰到字面值就会创建一个字符串对象
String teemo = new String("姜山"); //创建了两个字符串对象
char[] cs = new char[]{'加','格'};
String hero = new String(cs);// 通过字符数组创建一个字符串对象
String hero3 = garen + teemo;// 通过+加号进行字符串拼接
}
2,字符串特性
(1)String被修饰为final时,是不能被继承的。
(3)immutable(不可改变的)
不可改变的具体含义是指:不能增加长度,不能减少长度,不能插入字符,不能删除字符,不能修改字符。一旦创建好这个字符串,里面的内容 永远 不能改变。String 的表现就像是一个常量。
3,将字符串进行格式化
public static void main(String[] args) {
String name ="盖伦";
int kill = 8;
String title="超神";
//直接使用+进行字符串连接,编码感觉会比较繁琐,并且维护性差,易读性差
String sentence = name+ " 在进行了连续 " + kill + " 次击杀后,获得了 " + title +" 的称号";
System.out.println(sentence);
//格式化字符串
String sentenceFormat ="%s 在进行了连续 %d 次击杀后,获得了 %s 的称号%n";
String sentence2 = String.format(sentenceFormat, name,kill,title);
System.out.println(sentence2);
}
4 字符串长度,字符串.length()
public static void main(String[] args) {
String name ="盖伦";
System.out.println(name.length());
String unknowHero = "";
System.out.println(unknowHero.length());//可以有长度为0的字符串,既空字符串
}
七:字符串中的常用方法
1:获取字符:charAt (int index)
public static void main(String[] args) {
String sentence="12345";
char c=sentence.charAt(0);
System.out.println(c);
}
2:获取对应的字符数组(.toCharArray)
public static void main(String[] args) {
String sentence="12345";
char[] c=sentence.toCharArray();
System.out.println(sentence.length()==c.length);
}
3:截取子字符串:.subString()
public static void main(String[] args) {
String str="012345678";
String subString1=str.substring(3);//截取从第3个开始的字符串 (基0)
System.out.println(subString1);
String subString2=str.substring(3,5);//截取从第3个开始,第5个终止的字符串 (基0)
System.out.println(subString2);//左闭右开,3开5关
}
4:将字符串进行分隔:.split()
public static void main(String[] args) {
String str="01,23,45,67";
String sub[] =str.split(",");
for(String s:sub){
System.out.println(s);
}
}
5:去掉字符串中的空格:trim()
public static void main(String[] args) {
String str=" 01,23,45,67 ";
System.out.println(str);
System.out.println(str.trim());
}
6:字符串中的大小写转换:toLowerCase()全部变小写,toUpperCase()全部变大写
public static void main(String[] args) {
String str="ABCDEF";
String str1="asdf";
System.out.println(str.toLowerCase());
System.out.println(str1.toUpperCase());
}
7:定位:indexOf 判断字符或者子字符串出现的位置,contains 是否包含子字符串
public static void main(String[] args) {
String str="华山入口处的景色,是什么样子的";
System.out.println(str.indexOf('入'));
System.out.println(str.indexOf("华山"));
System.out.println(str.indexOf(',','1'));
System.out.println(str.lastIndexOf("的"));
System.out.println(str.contains("样子"));
}
8:替换:replaceAll替换所有,replaceFirst只替换一个
public static void main(String[] args) {
String str="华山入口处的景色,是什么样子的";
String temp=str.replaceAll("华山","泰山");
System.out.println(temp);
temp=temp.replaceAll("是什么样子的","-------");
System.out.println(temp);
temp=str.replaceFirst(",","-");
System.out.println(temp);
}
八:比较字符串
1:是否是同一个对象
==用于判断是否是同一个字符串对象
public static void main(String[] args) {
String str="华山入口处的景色,是什么样子的";
String str1=new String(str);
System.out.println(str==str1);
}
2:是否是同一个对象—特例
public static void main(String[] args) {
String str="华山入口处的景色,是什么样子的";
String str1="华山入口处的景色,是什么样子的";
System.out.println(str==str1);
}
一般说来,编译器每碰到一个字符串的字面值,就会创建一个新的对象
所以在第6行会创建了一个新的字符串"the light"
但是在第7行,编译器发现已经存在现成的"the light",那么就直接拿来使用,而没有进行重复创建
3:内容是否相同
使用equals进行字符串内容的比较,必须大小写一致
equalsIgnoreCase,忽略大小写判断内容是否一致
public static void main(String[] args) {
String str="abcde";
String str1=new String(str);
String str2=str.toUpperCase();
System.out.println(str==str1);//str和str1不是同一个对象
System.out.println(str.equals(str1));//str和str1的内容相同
System.out.println(str.equals(str2));//str和str2的内容不同
System.out.println(str.equalsIgnoreCase(str2));//在忽略大小写的情况下,str和str2的内容相同
}
4:是否以子字符串开始或者结束
startsWith //以...开始
endsWith //以...结束
public static void main(String[] args) {
String str="an apple";
String start="an";
String end="aple";
System.out.println(str.startsWith(start));
System.out.println(str.endsWith(end));
}
九:StringBuffer类型的字符串
StringBuffer是可变长的字符串
1:StringBuffer对象的创建(3种)
(1)StringBuffer sb = new StringBuffer();
无参数的构造方法(默认创建了一个可容纳16个字符的StringBuffer)
(2)StringBuffer sb = new StringBuffer(100); //创建一个可容纳100个字符的字符串
带整形参数的构造方法(创建一个可容纳100个字符的字符串)
(3)StringBuffer sb = new StringBuffer("Hello");
以String对象作为参数的构造方法:可容纳长度为参数字符串长度,再加16 个字符 。
2:常用方法:追加,删除,插入,反转
append追加
delete 删除
insert 插入
reverse 反转
public static void main(String[] args) {
String str1 = "let there ";
StringBuffer sb = new StringBuffer(str1); //根据str1创建一个StringBuffer对象
sb.append("be light"); //在最后追加
System.out.println(sb);
sb.delete(4, 10);//删除4-10之间的字符,从1开始数
System.out.println(sb);
sb.insert(4, "there ");//在4这个位置插入 there
System.out.println(sb);
sb.reverse(); //反转
System.out.println(sb);
}
3:长度,容量
为什么StringBuffer可以变长?
和String内部是一个字符数组一样,StringBuffer也维护了一个字符数组。 但是,这个字符数组,留有冗余长度
比如说new StringBuffer("the"),其内部的字符数组的长度,是19,而不是3,这样调用插入和追加,在现成的数组的基础上就可以完成了。
如果追加的长度超过了19,就会分配一个新的数组,长度比原来多一些,把原来的数据复制到新的数组中,看上去 数组长度就变长了 参考MyStringBuffer
length: “the”的长度 3
capacity: 分配的总空间 19
注: 19这个数量,不同的JDK数量是不一样的
public static void main(String[] args) {
String str1 = "the";
StringBuffer sb = new StringBuffer(str1);
System.out.println(sb.length()); //内容长度
System.out.println(sb.capacity());//总空间
}
十:字符串的问题