String类
-
字符串是常量,创建之后不可改变。
-
字符串字面值存储在字符串池中,可以共享。
-
String str = "Hello";
产生一个str对象,字符串Hello
在字符串池(常量池)中存储。 -
String str1 = new String("Hello");
产生两个对象,堆、池里面各存储一个。str1
指向堆里面的空间,堆里面指向常量池里面的字符串。案例:
public static void main(String[] args) { String name = "hello";//常量,存储在字符串池中(也叫常量池) name = "zhangsan";//“张三”,给name赋值时并没有修改数据hello,而是重新开辟一个空间放入"zhangsan",然后name指向它地址。 String name2="zhangsan"; //演示字符串的另一种创建方式,new String(); String str = new String("java"); String str2 = new String("java"); System.out.println(str==str2); //它们的对象地址是不同的,但是对象指向的字符串是同一个 System.out.println(str.equals(str2)); }
内存分析:
运行结果:
一、String常用方法
-
public int length()
:返回字符串的长度。 -
public char charAt(int index)
:根据下标获取字符。 -
public boolean contains(String str)
:判断当前字符串中是否包含str。案例:
public static void main(String[] args) { String str = "java是世界上最好的编程语言"; System.out.println(str.length()); System.out.println(str.charAt(9)); System.out.println(str.charAt(str.length()-1)); System.out.println(str.contains("java")); System.out.println(str.contains("php")); }
运行结果:
二、String常用方法2
-
public char[] toCharArray()
:将字符串转换成数组。 -
public int indexOf(String str)
: 查找str首次出现的下标,存在返回下标;不存在,则返回-1。 -
public int lastIndexOf(String str)
:查找字符串再当前字符串中最后一次出现的下标索引。public static void main(String[] args) { String str = "java是世界上最好的java编程语言,java真香"; System.out.println(Arrays.toString(str.toCharArray())); //打印 System.out.println(str.indexOf("java")); System.out.println(str.indexOf("java", 4));//从第四个下标开始索引 System.out.println(str.lastIndexOf("java"));//索引最后一个java }
运行结果:
三、String常用方法3
-
public String trim()
:去掉字符串前后空格。 -
public String toUpperCase()
:将小写转换成大写。-->toLowerCase();
把大写转成小写。 -
public boolean endsWith(String str)
:判断字符串是否以str
结尾。-->startWith(String str);
判断是否已str开头。案例:
public static void main(String[] args) { String str2 = " Hello Word "; System.out.println(str2.trim()); //去掉前后空格 System.out.println(str2.toUpperCase());//字母全部大写 System.out.println(str2.toLowerCase());//字母全部小写 String str3 = "hello.java"; System.out.println(str3.endsWith(".java"));//判断是否以.java结尾 System.out.println(str3.startsWith("hello"));//判断是否以hello开头 }
运行结果:
四、String常用方法4
-
public String replace(char oldChar,char newChar);
:将旧字符串替换成新字符串。 -
public String[] split(String str);
:根据str做拆分。 split:分裂,使分裂。案例:
public static void main(String[] args) { String str = "java是世界上最好的java编程语言,java真香"; System.out.println(str.replace("java", "php")); String say="java is the best,programing language"; //String[] arr = say.split(" "); //以空格作为拆分符号 String[] arr = say.split("[ ,]+");//以空格或者是`,`作为拆分符号,`+`表示可以有一个或多个符号成为修饰符 System.out.println(arr.length); //返回arr的长度 for(String string : arr) { System.out.println(string); } //补充两个方法、equals();、compare();比较大小; System.out.println("------比较---------"); String s1 = "hello"; String s2 = "HELLO"; System.out.println(s1.equals(s2)); System.out.println("不区分大小写的比较:"+s1.equalsIgnoreCase(s2));//不区分大小写的比较 String s3 = "abc";//a:97 String s4 = "xyz";//X:120 System.out.println(s3.compareTo(s4));//97-120=-23,运行的结果是-23 String s5 = "abc"; String s6 = "abcxyz"; System.out.println(s5.compareTo(s6));//这次比的是长度 -3,反过来就是 +3 }
运行结果:
-
补充:
substring();
:截取,括号内一个参数时,是从那个参数开始。两个时,是一个开始,一个结束。
案例:
//1.将str中的单词单独获取出来 //2.将str中的text替换成practice //3.再text前面插入一个easy //4.将每个单词的首字母改为大写 public static void main(String[] args) { String str = "this is a text"; //1.将str的单词单独获取出来 System.out.println("---1.将str的单词单独获取出来-----"); String[] arr = str.split(" "); for (String s : arr) { System.out.println(s); } //2.将str中的text替换成practice System.out.println("---2.将str中的text替换成practice----"); System.out.println(str.replace("text", "practice")); //3.再text前面插入一个easy System.out.println("---3.再text前面插入一个easy----"); System.out.println(str.replace("text", "easy text")); //4.将每个单词的首字母改为大写 for(int i=0;i<arr.length;i++) { char first = arr[i].charAt(0); //把第一个字符转成大写 char upperfirst = Character.toUpperCase(first); //大写的首字母+从下标1开始截取单词 String news = upperfirst+arr[i].substring(1); //打印新数组 System.out.println(news); } }
运行结果:
五、可变字符串
-
StringBuffer
:可变长字符串,JDK1.0提供,运行效率缓慢、线程安全。 -
StringBuilder
:可变长字符串,JDK5.0提供,运行效率快、线程不安全。 -
和String的区别:
- 直接开辟一个缓冲区,我们操作的时候直接再缓冲区上操作。
- 效率要比String高,比String节省空间。
-
方法:
-
append();
:追加缓冲区后面加字符串。 -
insert();
:添加 -
replace();
替换 -
delete();
删除案例:
public static void main(String[] args) { StringBuffer sb = new StringBuffer(); //1.append();追加 sb.append("java真香!"); System.out.println(sb.toString()); sb.append("java世界第一"); System.out.println(sb.toString()); //2.insert();添加 sb.insert(0, "我在最前面"); System.out.println(sb.toString()); //3.replace();替换 sb.replace(0, 5, "hello");//将指定的下标0开始到第五个下标替换为"hello" System.out.println(sb.toString()); //4.delete();删除 sb.delete(0, 5); //从0开始删除5个 System.out.println(sb.toString()); //清空 sb.delete(0, sb.length()); System.out.println(sb.length()); }
运行结果:
-
-
补充:
currentTimeMillis();
获取当前时间。