String
- 字符串是常量,创建之后不可改变。
- 字符串字面值存储在字符串池中,可以共享。
public static void main(String[] args) {
//zhangsan存储在字符串池中
String name = "zhangsan";
//lisi赋值给name常量,并没有修改数据,
// 而是重新开辟一个空间
//name的引用指向lisi
name="lisi";
String name2 = "lisi";
}
String s = "hello";
产生一个对象,字符串池中存储String s = new String("hello");
产生两个对象,堆、池中各存储一个。栈中存放的是堆中的地址
//栈中存放的是堆的地址
String str = new String("java");
String str1 = new String("java");
//equles在object类中比较的是地址,String类重写比较的是值
System.out.println(str.equals(str1));//true
System.out.println(str==str1);//false
常用方法
- public int length():返回字符串的长度
- public char charAt():根据下标获取字符
- public boolean contains(String str):判断当前字符串中是否包含str
//length():返回字符串长度
//charAt(int index):返回某个位置字符
//contains(String str):判断是否包含某个字符串
String content = "java best";
System.out.println(content.length());
System.out.println(content.charAt(4));
System.out.println(content.contains("ab"));
- public char[] toCharArray():将字符串转换成数组
- public int index0f(String str):查找str首次出现的下标,存在则返回下标;不存在则返回-1
- public int lastIndex0f(String str):查找str最后一次出现的下标索引
char[] chars = content.toCharArray();
System.out.println(chars[0]);
System.out.println(Arrays.toString(content.toCharArray()));
System.out.println(content.indexOf("a",2));
System.out.println(content.lastIndexOf("a"));
- public String trim():去掉字符串前后的空格
- public String toUpperCase()/toLowerCase():将小写转换成大写
- public boolean end/startWith(String str):判断字符串是否以str结尾
- public String replace(char oldChar,char newChar):将旧字符串替换成新的字符串
- public String[] split(String str):根据str做拆分
System.out.println(content.replace("java", "php"));
//用空格和.拆分 +表示可以出现多个空格和.
String[] s = content.split("[ .]+");
System.out.println(s.length);
for (String s1:s
) {
System.out.println(s1);
}
-
equalsIgnoreCase():忽略大小写的比较
-
compareTo():
- 返回参与比较的前后两个字符串的asc码的差值,如果两个字符串首字母不同,则该方法返回首字母的asc码的差值。
- 如果两个字符串不一样长,可以参与比较的字符又完全一样,则返回两个字符串的长度差值。
-
subString():截取字符串
-
将字符串每个单词首字母替换成大写
String str = "this is a text";
String[] s = str.split(" ");
for(int i = 0;i<s.length;i++){
char c = s[i].charAt(0);
char c1 = Character.toUpperCase(c);
System.out.println(c1 + s[i].substring(1));
}
可变字符串
- StringBuffer:可变长字符串,运行效率慢,线程安全
- StringBuilder:可变长字符串,运行效率快,线程不安全
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
//1. append():追加
sb.append("java is best");
System.out.println(sb.toString());
sb.append("java like");
System.out.println(sb.toString());
//2.insert():插入,可以在某个位置插入
sb.insert(0,"szx");
System.out.println(sb.toString());
//3.replace()
sb.replace(0,3,"sss");
System.out.println(sb.toString());
//4.delete():删除
sb.delete(0,3);
System.out.println(sb.toString());
//5.reverse():反转
sb.reverse();
System.out.println(sb.toString());
//6.清空
sb.delete(0,sb.length());
System.out.println(sb.toString());
}
- 效率对比,StringBuilder>StringBuffer>String
public static void main(String[] args) {
//开始时间
long start = System.currentTimeMillis();
//String s1 ="";
//for (int i=0;i<99999;i++){
//s1+=i;
//}
StringBuilder s1 =new StringBuilder();
for (int i=0;i<99999;i++){
s1.append(i);
}
System.out.println(s1);
long end = System.currentTimeMillis();
System.out.println("time:"+(end-start));
}