1、String类
1.java中最常用的类。final类不能被继承
2.String表示字符串常量。我们平时使用" "将内容进行包裹,就形成了字符串对象
3.String使用频率较高,Java对他做了一定的优化,———字符串池(String pool)
构造方法
1.String() :创建一个空字符串
2.String(byte[]):根据字节数组构建一个字符串
3.String(char[]):根据字符数组构建一个字符串
4.String(String):复制一个字符串
5.String(StringBuffer):根据字符缓冲区构建字符串;
6.String(StringBuilder):根据字符缓冲区构建字符串;
使用最多的是字面值 String str="abc";
public class StringDemo {
public static void main(String[] args) {
String str01 =new String();
System.out.println(str01);
byte[] bytes={1,2,3,4};
String str02=new String(bytes);//处理流的时候使用
System.out.println(str02);
char[] chars={'a','b','c'};
String str03=new String(chars);
System.out.println(str03);
String str04=new String("abc");
System.out.println(str04);
//常用的“”
String str05 = "abc";
System.out.println(str05);
}
常用方法
public class MethodDemo {
public static void main(String[] args) {
//字符串常用方法
String str = "hello world";
//1.获取字符串的长度 int length()
System.out.println(str.length());
//2.根据索引找到字符串中的字符 char charAt(int index)
char c = str.charAt(10);
System.out.println(c);
//3.根据索引对字符串进行截取,返回一个新的字符串:String substring(int startIndex)
String s = str.substring(5);
System.out.println(s);
//4.根据索引对字符串进行截取,返回一个新的字符串:String substring(int startIndex,int endIndex):[statIndex,endIndex)
String s1 = str.substring(1, 5);
System.out.println(s1);
//5.字符串拼接:String concat(String str)
String s2 = str.concat("java");//相当于 str + "java"
System.out.println(s2);
//6.判断字符串是否以指定字符串开头:boolean startsWith(String prefix)
boolean b = str.startsWith("q");
System.out.println(b);
//7.判断字符串是否以指定字符串结尾:boolean endsWith(String suffix)
boolean b1 = str.endsWith("d");
System.out.println(b1);
//8.判断字符串是否包含指定字符串:boolean contains(String str)
boolean b2 = str.contains("ll");
System.out.println(b2);
//9.判断字符串是否为空:boolean isEmpty()
boolean empty = str.isEmpty();
System.out.println(empty);
//10.判断字符串(内容)是否相等:boolean equals(Object obj)
boolean b3 = str.equals("hello world");
System.out.println(b3);
//11.去空格(去掉的是前后的空格) String trim();
str=" hello world ";
String trim = str.trim();
System.out.println(trim);
//12.字符串转大写 String toUpperCase()
String upperCase = str.toUpperCase();
System.out.println(upperCase);
//13.字符串转小写 String toLowerCase()
str="HELLO WORLD";
String lowerCase = str.toLowerCase();
System.out.println(lowerCase);
//14.对字符串进行拆分,返回一个 String[] split(String regex)
String st="1#2#3#4#5";
String[] split = st.split("#");
System.out.println(Arrays.toString(split));
//15.查找字符串在此字符串序列中第一次出现的索引位置:int indexOf(String str)
str="hello world";
int indexOf = str.indexOf("ql");
System.out.println(indexOf);
//16.返回指定字符在此字符串中最后一次出现处的索引 int lastIndexOf(int ch)
int i = str.lastIndexOf("l");
System.out.println(i);
//17.对字符串中的内容进行替换,返回一个新的字符串 String replace(原来的值,新的值);
String replace = str.replace("l", "q");
System.out.println(replace);
}
}
2、字符串与基本数据类型的转换
//将字符串转成数字 对应包装类.parseXXX(String str)
int a=3;
String b = "5";
System.out.println(a+Integer.parseInt(b));
//将数字转成字符串 String.valueOf(数字类型变量)
或字符串+"" 或者调用包装类的toString方法
String s = String.valueOf(a);
System.out.println(s+Integer.parseInt(b));
//当我们创建Integer类型的对象时,如果这个数字在-128到127之间,
则直接从缓存池中获取,否则,则创建一个对象,并放入缓存池中。
Integer j = 127;
Integer k = 127;
System.out.println(j==k);
//当我们创建Integer类型的对象时,如果这个数字在-128到127之间,
则直接从缓存池中获取,否则,则创建一个对象,并放入缓存池中。
Integer m = 128;
Integer n = 128;
System.out.println(n==m);
1.字符串是一个常量,一旦定义就不可以修改,我们调用方法都不是在此字符串中进行操作,都返回一个新的字符串
2.需要理解字符串池
String s1 = "hello";
String s2 = "hello";
String s3 = new String("hello");
String s4 = new String("hello");
3、字符串缓冲区StringBuffer及StringBuilder
字符串缓冲区 主要是用来处理字符串,与String类不同,缓冲区的内容是可以改变的。
StringBuffer: 线程安全的 -----安全,效率低
StringBuilder:非线程安全的---效率高,不安全
String类型主要用来存储字符串的。—————缓存区主要用来处理字符串的
StringBuffer和StringBuilder 用法相同
StringBuilder
1.StringBuilder() 构造一个不带任何字符的字符串生成器,其初始容量为 16 个字符。
2.StringBuilder(int capacity) 构造一个不带任何字符的字符串生成器,其初始容量由capacity 参数指定。
3.StringBuilder(String str) 构造一个字符串生成器,并初始化为指定的字符串内容。
常用方法
public class StringBuilderDemo {
public static void main(String[] args) {
//创建一个StringBuilder对象
StringBuilder sb = new StringBuilder("Hello");
StringBuilder sb1 = new StringBuilder();
StringBuilder sb2 = new StringBuilder(20);
//常用方法
//1.向缓冲区尾部追加一个字符串
sb.append("abc");
System.out.println(sb);
//2. 返回当前容量。
int capacity = sb.capacity();
System.out.println(capacity);
//3. 移除此序列的子字符串中的字符。
sb.delete(0,2);//开始包含 结束不包括
System.out.println(sb);
//4.将字符串插入到指定的位置 第一个参数是 位置不是索引!!!!
sb.insert(2,"play");
System.out.println(sb);
//5.指定位置元素替换
sb.replace(2,4,"abc");
System.out.println(sb);
//6.字符串反转
sb.reverse();
String s=sb.toString();
System.out.println(sb);
}
}
4、小结
String字符串类主要存储字符串
StringBuilder 和 StringBuffer 主要用来操作(删除,修改,追加,插入)字符串如果我们要对字符串进行操作
1.创建字符串
2.将字符串转为字符串缓冲区对象(StringBuilder 或 StringBuffer)进行操作
3.(StringBuilder 或 StringBuffer)转换为String
练习
- 下面这条语句一共创建了多少个对象:String s=“welcome”+“to”+“huayu”;
由于字符串字面量是在编译期确定的,JVM 会先计算 "welcome" + "to" + "huayu" 的结果,然后将其作为一个单一的字符串字面量 "welcometohuayu" 放入字符串常量池中。
这个过程中,实际上只创建了一个字符串对象,即 "welcometohuayu",并且这个字符串对象会被放入字符串常量池中。