五、String 类
1. String概述
- 字符串是常量,创建之后不可改变。
- 字符串字面值存储在字符串池中,可以共享。
- String s = “Hello”; 产生一个对象,字符串池中存储。
- String s = new String(“Hello”); 产生两个对象,堆、池各存储一个。
package com.zhuo.qf_5;
public class Demo3 {
public static void main(String[] args) {
String name="hello";//“hello” 常量存储在字符串中
name="zhangsan";//“张三”赋值给那么变量,给字符串赋值时,并没有修改数据,而是重新开辟一个空间
String name2="zhangsan";
System.out.println(name==name2); //true
System.out.println(name.equals(name2)); //true
//演示字符串的另一种创建方式,new String();
String str = new String("java");
String str2 = new String("java");
System.out.println(str==str2); //false
System.out.println(str.equals(str2)); //true
}
}
2. 常用方法
- public int length():返回字符串的长度。
- public char charAt(int index):返回某个位置的字符。
- public boolean contains(String str):判断当前字符串中是否包含某个字符串。
package com.zhuo.qf_5;
public class Demo3 {
public static void main(String[] args) {
System.out.println("----------字符串方法的使用1-----------");
//字符串方法的使用
//1. length():返回字符串的长度
//2. charAt(int index):返回某个位置的字符
//3. contains(String str):判断是否包含某个字符串
String content="java是世界上最好的编程语言";
System.out.println(content.length()); //15
System.out.println(content.charAt(0)); //j
System.out.println(content.charAt(content.length()-1)); //言
System.out.println(content.contains("java")); //true
System.out.println(content.contains("php")); //false
}
}
- public char[ ] toCharArray():将字符串转换成数组。
- public int indexOf(String str):查找str首次出现的下标索引,存在,则返回该下标;不存在,则返回-1。
- public int lastIndexOf(String str):查找字符串在当前字符串中最后一次出现的下标索引。
package com.zhuo.qf_5;
public class Demo3 {
public static void main(String[] args) {
System.out.println("----------字符串方法的使用2-----------");
//字符串方法的使用2
//4. toCharArray():返回字符串中对应的数组
//5. indexOf():返回字符串首次出现的位置
//6. lastIndexOf():返回字符串最后一次出现的位置
String content2="java是世界上最好的java编程语言,java真香";
System.out.println(Arrays.toString(content2.toCharArray()));
System.out.println(content2.indexOf("java")); //0
System.out.println(content2.indexOf("java", 4)); //11
System.out.println(content2.lastIndexOf("java")); //20
}
}
- public String trim():去掉字符串前后的空格。
- public String toUpperCase():将小写转成大写; toLowerCase():把大写转小写。
- public boolean endsWith(String str):判断字符串是否以str结尾;starsWith(str):判断是否以str开头。
package com.zhuo.qf_5;
public class Demo3 {
public static void main(String[] args) {
System.out.println("----------字符串方法的使用3-----------");
//字符串方法的使用3
//7. trim():去掉字符串前后的空格
//8. toUpperCase():把小写转成大写; toLowerCase():把大写转小写
//9. endsWith(str):判断是否以str结尾;starsWith(str):判断是否以str开头
String content3=" Hello World ";
System.out.println(content3.trim()); //Hello World
System.out.println(content3.toUpperCase()); // HELLO WORLD
System.out.println(content3.toLowerCase()); // hello world
String filename = "hello.java";
System.out.println(filename.endsWith("java")); //true
System.out.println(filename.startsWith("hello")); //true
}
}
- public String replace(char oldChar,char newChar):将旧字符串替换成新字符串
- public String[ ] split(String str):根据str做拆分。
package com.zhuo.qf_5;
public class Demo3 {
public static void main(String[] args) {
System.out.println("----------字符串方法的使用4-----------");
//字符串方法的使用4
//10. replace(char old,char new):用新的字符或字符串替换旧的字符或字符串
//11. split():对字符串进行拆分
String content4="java是世界上最好的java编程语言,java真香";
System.out.println(content4.replace("java", "php"));
String say="java is the best programing language,java zhuo";
String[] arr=say.split("[ ,]+"); //空格或,拆分,"+"-->可以是多个
for(String string:arr) {
System.out.println(string);
}
}
}
- equals():对字符串的内容进行比较;
- euqalsIgnoreCase():对字符串的内容不区分大小写进行比较;
- compareTo:比较值是否相同-按字典顺序比较,返回的值是变量1比变量2的字典顺序。
package com.zhuo.qf_5;
public class Demo3 {
public static void main(String[] args) {
//补充两个方法equals , compare():比较大小
System.out.println("-------------补充--------------");
String s1="hello";
String s2="HELLO";
System.out.println(s1.equals(s2)); //false
//equalsIgnoreCase()方法:不区分大小写比较
System.out.println(s1.equalsIgnoreCase(s2)); //true
String s3="abc"; //97
String s4="xyz"; //120
//在字典中的首个不一样的值相减
System.out.println(s3.compareTo(s4)); // 97-120 = -23
String s5="abc"; //3个字母
String s6="abcxyz"; //6个字符
System.out.println(s5.compareTo(s6)); //3-6 = -3
}
}
3. String案例演示
-
需求
- 已知String str = “this is a text”;
- 将str中的单词单独获取出来
- 将str中的text替换为practice
- 在text前面插入一个easy
- 将每个单词的首字母改为大写
package com.zhuo.qf_5;
public class Demo4 {
public static void main(String[] args) {
String str = "this is a text";
//1. 将str中的单词单独获取出来
String[] arr = str.split(" ");
System.out.println("-------1. 将str中的单词单独获取出来--------");
for (String s : arr) {
System.out.println(s);
}
//2. 将str中的text替换为practice
System.out.println("-------2. 将str中的text替换为practice--------");
String str2=str.replace("text", "practice");
System.out.println(str2);
//3. 在text前面插入一个easy
System.out.println("-------3. 在text前面插入一个easy--------");
String str3=str.replace("text", "easy text");
System.out.println(str3);
//4. 将每个单词的首字母改为大写
System.out.println("-------4. 将每个单词的首字母改为大写--------");
for(int i=0;i<arr.length;i++) {
char first = arr[i].charAt(0);
//把第一个字符转成大写
char upperfirst = Character.toUpperCase(first);
String str4 = upperfirst+arr[i].substring(1);
System.out.println(str4);
}
}
}
4.可变字符串
- StringBuffer:可变长字符串,JDK1.0提供,运行效率慢、线程安全。
- StringBuilder:可变长字符串,JDK1.5提供,运行效率快、线程不安全。
package com.zhuo.qf_5;
/**
* StringBuffer和StringBuilder的使用
* 和String区别:(1)效率比String高 (2)比String节省内存
* @author _秋刀鱼
*
*/
public class Demo5 {
public static void main(String[] args) {
//StringBuffer 和 StringBuilder 效果一样
//StringBuffer sb=new StringBuffer();
StringBuilder sb=new StringBuilder();
//1 append();追加
sb.append("java世界第一");
System.out.println(sb.toString());//java世界第一
sb.append("Java真香");
System.out.println(sb.toString());//java世界第一Java真香
sb.append("java不错");
System.out.println(sb.toString());//java世界第一Java真香java不错
//2 insert();添加
sb.insert(0, "我是天下第一");
System.out.println(sb.toString());//我是天下第一java世界第一Java真香java不错
//3 replace(); 替换
sb.replace(0, 6, "hello,"); //注意:包头不包尾 [0,6)
System.out.println(sb.toString());//hello,java世界第一Java真香java不错
//4 delete();删除
sb.delete(0, 6);
System.out.println(sb.toString());//java世界第一Java真香java不错
//清空
sb.delete(0, sb.length());
System.out.println(sb.toString());
System.out.println(sb.length());//0
}
}
-
StringBuffer 和 StringBuilder 的使用
和 String 区别 :(1)效率比 String 高 ;(2)比 String 节省内存
package com.zhuo.qf_5;
import javax.xml.stream.events.StartDocument;
/**
* 验证StringBuilder效率高于String
* @author _秋刀鱼
*
*/
public class Demo6 {
public static void main(String[] args) {
//开始时间
long start=System.currentTimeMillis();
// String string = "";
// for(int i=0;i<99999;i++) {
// string+=i;
// }
// long end=System.currentTimeMillis();
// System.out.println("用时:"+(end-start)); //用时:10407
StringBuilder sb=new StringBuilder();
for(int i=0;i<99999;i++) {
sb.append(i);
}
System.out.println(sb.toString());
long end=System.currentTimeMillis();
System.out.println("用时:"+(end-start)); //用时:396
}
}
忽有故人心上过,
回首山河已是秋。