String类
- 字符串是常量,创建之后不可改变。
- 字符串字面值存储在字符串池中,可以共享。
- String s = “hello”;产生一个对象,字符串池中存储
- String s = new String(“hello”);产生两个对象,堆、池各存储一个

public class Demo01 {
public static void main(String[] args) {
String name = "hello";
name = "张三";
String name2 = "张三";
String str1 = new String("java");
String str2 = new String("java");
System.out.println(str1==str2);
System.out.println(str1.equals(str2));
}
}
常用方法
- public int length():返回字符串长度。
- public char charAt(int index):根据下标获取字符。
- public boolean contains(String str):判断当前字符串中是否包含str。
- public char[] toCharArray():将字符串转换成数组。
- public int indexOf(String str):查找str首次出现的下标,存在,则返回该下标;不存在,则返回-1.
- public int lastIndexOf(String str):查找字符串在当前字符串中最后一次出现的下标索引。
- public String trim():去掉字符串前后的空格
- public String toUpperCase():将小写转换成大写。
- public Boolean endsWith(String str):判断字符串是否以str结尾。
- public String replace(char oldChar,char newChar);将旧字符串替换成新字符串。
- public String split(String str);根据str做拆分
public class Demo01 {
public static void main(String[] args) {
String name = "hello";
name = "张三";
String name2 = "张三";
String str1 = new String("java");
String str2 = new String("java");
System.out.println(str1==str2);
System.out.println(str1.equals(str2));
System.out.println("=================");
String content = "java是世界上最好的编程语言,java真香" ;
System.out.println(content.length());
System.out.println(content.charAt(content.length()-1));
System.out.println(content.contains("java"));
System.out.println(content.contains("php" ));
System.out.println("=========================================");
System.out.println(Arrays.toString(content.toCharArray()));
System.out.println(content.indexOf("java"));
System.out.println(content.indexOf("java",4));
System.out.println(content.lastIndexOf("java"));
System.out.println("=========================================");
String content2 = " hello World! ";
System.out.println(content2.trim());
System.out.println(content2.toUpperCase());
System.out.println(content2.toLowerCase());
String filename = "hello.java" ;
System.out.println(filename.endsWith(".java"));
System.out.println(filename.startsWith("hello"));
System.out.println("=========================================");
System.out.println(content.replace("java","php"));
String say = "java is the best programming language,,,java xiang" ;
String[] arr = say.split("[ ,]+");
System.out.println(arr.length);
for (String string:arr){
System.out.println(string);
}
System.out.println("=========================================");
String s1 = "hello";
String s2 = "HELLO";
System.out.println(s1.equalsIgnoreCase(s2));
String s3 = "abc";
String s4 = "ayzawe";
System.out.println(s3.compareTo(s4));
String s5 = "abc";
String s6 = "abcasd";
System.out.println(s5.compareTo(s6));
}
}
案例演示
- 需求:
- 已知String str= “this is a text”;
- 1.将str中的单词单独获取出来
- 将str中的text替换为practice
- 在text前面插入一个easy
- 将每个单词的首字母改为大写
String str = "this is a text";
String[] arr = str.split(" ");
for(int i=0;i<arr.length;i++){
char first = arr[i].charAt(0);
char upperfirst = Character.toUpperCase(first);
String news = upperfirst + arr[i].substring(1);
System.out.println(news);
}
可变字符串
- StringBuffer:可变长字符串,JDK1.0提供,运行效率慢,线程安全
- StringBuilder:可变长字符串,JDK5.0提供,运行效率快、线程不安全
public class Demo02 {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
sb.append("java世界第一");
System.out.println(sb);
sb.append("java真香");
System.out.println(sb);
sb.insert(0,"我在最前");
System.out.println(sb);
sb.replace(0,4,"hello");
System.out.println(sb);
sb.delete(0,5);
System.out.println(sb);
sb.delete(0,sb.length());
System.out.println(sb.length());
}
}
- 和String区别
(1)效率比String高
(2)比String节省内存
public class Demo03 {
public static void main(String[] args) {
long start = System.currentTimeMillis();
StringBuilder sb = new StringBuilder();
for(int i = 0;i<99999;i++){
sb.append(i);
}
System.out.println(sb);
long end = System.currentTimeMillis();
System.out.println("用时:"+(end-start));
}
}