字符串是常量,创建之后无法改变
字符串的字量值存储在字符串池中,可以共享,
String s = "Hello",创建一个对象,在字符串池中存储。
String s = new String("Hello")创建两个对象,堆和池里各存放一个。
原理如下图:
String类的常用方法:
- public int length() :返回字符串的长度。
- public char charAt(int index):根据下标获取字符串
- public char[] toCharArray() :将字符串转换成数组。
- public boolean contains (String str) :判断当前字符串中是否包含str。
- public int index0f (String str) :查找str首次出现的下标,存在,则返回该下标;不存在,则返回-1。
- public int lastIndex0f (String str) :查找字符串在当前字符串中最后一次出现的下标索引。
- public String trim() :去掉字符串前后的空格。
- public String toUpperCase () :将小写转成大写。
- public boolean endWith (String str) :判断字符串是否以str结尾。
- public String replace (char oldChar, char newChar); 将旧字符串替换成新字符串
- public String[] split (String str) :根掂str做拆分。
直接看代码:
package com.classes.string;
import java.util.Arrays;
public class Demo01 {
public static void main(String[] args) {
String name = "hello";
name = "zhangsan";
String name1 = "zhangsan";
String str1 = new String("java");
String str2 = new String("java");
System.out.println(str1==str2);
System.out.println(str1.equals(str2));
// 字符串方法的使用
// 1.length()返回字符串的长度
// 2.charAt(int index)返回字符串某个位置的字符
// 3.contains()返回字符串是否包含某个子字符串
System.out.println("--------------字符串的方法使用1-------------------------");
String string = new String("Java是世界上最好的编程语言,Java真香");
System.out.println(string.length());//空格也算一个长度
System.out.println(string.charAt(0));
System.out.println(string.charAt(string.length()-1));
System.out.println(string.contains("Java"));
System.out.println("--------------字符串的方法使用2-------------------------");
// 4.toCharArray返回字符串的数组类型
// 5.IndexOf,返回子字符串首次出现的位置
// 6.LastIndexOf,返回子字符串最后一次出现的位置
System.out.println(Arrays.toString(string.toCharArray()));
System.out.println(string.indexOf("Java"));
// 还可以多个参数fromIndex,表示从哪个位置开始找
System.out.println(string.indexOf("Java",4));
System.out.println(string.lastIndexOf("Java"));
System.out.println("--------------字符串的方法使用3-------------------------");
// 7.trim()去掉字符串前后的空格
// 8.toUpperCase把小写变成大写 toLowCase 把大写变成小写
// 9.endWith(str)判断字符串是否以str结尾 startWith(str)判断字符串是否以str开头
String string1 = " Hello World! ";
System.out.println(string1.trim());
System.out.println(string1.toUpperCase());
System.out.println(string1.toLowerCase());
String filename = "hello.java";
System.out.println(filename.endsWith(".java"));
System.out.println(filename.startsWith("hello"));
System.out.println("--------------字符串的方法使用4-------------------------");
// 10.replace(char old,char new)用新的字符串替换旧的字符串
// 11.split();对字符串进行拆分
System.out.println(string.replace("Java", "Php"));
String string3 = "Java is the best programing language,java nice";
String[] arr = string3.split("[ ,]+");
for (String string4 :arr) {
System.out.println(string4);
}
System.out.println("--------------补充-------------------------");
// 补充两个方法equalsIgnoreCase、compareTo();比较大小
String str3 = "hello world";
String str4 = "HELLO WORLD";
System.out.println(str3.equalsIgnoreCase(str4));//忽略大小写的比较
String str5 = "abc";//a = 97
String str6 = "xyz";//x = 120
String str7 = "abcxyz";
String str8 = "abc";
System.out.println(str5.compareTo(str6));//比较首个字符
System.out.println(str5.compareTo(str7));//比较字符串长度
System.out.println(str5.compareTo(str8));//相等为0
}
}
字符串练习:
已知字符串String str = "this is a text";
1.将str中的单词单独获取出来
2.将str中的text替换成practice
3.在text前面加上easy
4.将每个单词首字母大写
package com.classes.string;
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
// 1.将字符串中的单词分别提取出来
String str = "this is a text";
String[] arr = str.split(" ");
for (String string:arr) {
System.out.println(string);
}
// 2.将text替换成practice
System.out.println(str.replace("text","practice"));
// 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);
// 拼接,substring(1)是从第1个字符进行截取
String string = upperFirst+arr[i].substring(1);
System.out.print(string+" ");
}
}
}
运行结果:
StringBuffer和StringBulider:
StringBuffer: 可变长字符串,JDK1. 0提供,运行效率慢、线程安全。(适合多线程)
StringBuilder:可变长字符串,JDK5. 0提供,运行效率快、线程不安全。(适合单线程)
但都比String类效率高。
具体用法:
package com.classes.string;
/*
StringBuffer和StringBuilder的使用
*/
public class Demo02 {
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,"java");
System.out.println(sb.toString());
// 4.delete 删除
sb.delete(0,5);
System.out.println(sb.toString());
// StringBuffer和StringBuilder一样,一个适合单线程,一个适合多线程
}
}
运行结果:
StringBuffer和StringBulider用法一样。
验证它们两效率是否比String高:
package com.classes.string;
// 验证StringBuffer的速度
public class Demo03 {
public static void main(String[] args) {
// 开始时间
long start = System.currentTimeMillis();
// String str ="";
// for (int i = 0; i <9999 ; i++) {
// str+=i;
// }
StringBuffer sb = new StringBuffer();
for (int i = 0; i <9999 ; i++) {
sb.append(i);
}
System.out.println(sb.toString());
long end = System.currentTimeMillis();
System.out.println("用时:"+(end-start));
}
}