String
- String 字符串:一组字符序列
- 一定要记住,String类型的字符串是不可变的串
创建String对象的几个常见方式
String()
String str1 = new String();//是一个""对象
String(“abc”)
String str2 = new String("abc");
直接创建
String str3 = "JAVA";
题目1
public static void main(String[] args) {
String str1 = new String();//是一个""对象
String str2 = "";
//str1 和 str2 比较
System.out.println(str1==str2);
}
题目2
public static void main(String[] args) {
String str = "123";
System.out.println(str);
change(str);
System.out.println(str);
}
public static void change(String str) {
str = "234";
}
答案1:false
答案2:123
123
常见方法
方法 | 作用 | 说明 |
---|---|---|
char charAt(int index) | 返回指定索引处的值 | |
int codePointAt(int index) | 返回指定索引处的字符(Unicode代码点) | |
int compareTo(String anotherString) | 按字典顺序比较两个字符串。比较基于字符串中每个字符的Unicode值。 | |
String String concat(String str) | 将指定的字符串连接到此字符串的末尾。 | 原字符串的值不会变 |
static String copyValueOf(char[]) | 将字符数组转化为String对象 | |
boolean endsWith(String s) | 测试此字符串是否以指定的后缀结尾 | |
int indexOf(char ch) | 返回指定字符第一次出现的字符串中的索引 | |
String replace(char oldChar,char newChar) | 返回用oldChar此替换此字符串中所有出现的 字符串newChar。 | |
String[] split(String regex) | 将此字符串拆分为给定正则表达式的匹配项。 |
public class StringTest01 {
public static void main(String[] args) {
String str = "ILoveJava";
//charAt()
char ch = str.charAt(1);
System.out.println(ch);//L
//codePointAt(int index)
int num = str.codePointAt(6);
System.out.println(num);//97 a的Unicode值为97
///compareTo(String)
str = "a";
System.out.println(str.compareTo("bbadads"));//返回-1,a的值为97,b的值为98 97-98=-1
//String concat(String str)
System.out.println(str.concat("bcd"));
//static String copyValueOf(char[])
char[] chs = new char[] {'i','l','o','v','e'};
str = String.copyValueOf(chs);
System.out.println("创建新的字符串:"+str);//ilove
str = String.copyValueOf(chs,1,4);
System.out.println("创建新的字符串:"+str);
//boolean endsWith(String s)
str = "****.avi";
boolean flag = str.endsWith(".avi");
System.out.println("str是否是.avi格式:"+flag);//true
//int index(char ch)
str = "QQ.exe";
System.out.println(str.indexOf("."));//2
//String replace(char oldChar,char newChar)
str = "2019.7.24";
str = str.replace(".", "/");
System.out.println(str);//2019/7/24
//String[] split(String regex)
str = "login?u=123p=abc";
String[] strs = str.split("=");
for(String s:strs) {
System.out.println(s);//login?u 123p abc
}
//String subString(beginIndex)
str = "0123456789";
str = str.substring(2);
System.out.println(str);//23456789
str = "0123456789";
str = str.substring(2, 7);
System.out.println(str);//23456
//String toUpperCase()
str = "abc";
str = str.toUpperCase();
System.out.println(str);//ABC
//通过静态方法创建String对象
str = String.valueOf(123);
System.out.println(str);//123
// 对象转字符串 其实就是调用当前对象的toString方法
User u = new User(10);
String str2 = String.valueOf(u);
System.out.println(str2);//User [age=10]
}
}
class User{
private int age;
public User() {
// TODO Auto-generated constructor stub
}
public User(int age) {
super();
this.age = age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User [age=" + age + "]";
}
}
StringBuffer
/*
* StringBuffer:
* 可变字符串,底层是一个字符数组,动态数组
*
*/
public class StringBufferTest {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
//容量16
System.out.println("通过空构造器创建的StringBuffer的容量:"+sb.capacity());
sb.append(true);
sb.append(false).append("123");//链式编程
System.out.println(sb);//truefalse123
System.out.println(sb.length());//12
// 添加元素
sb.insert(1, "heihei");
System.out.println(sb);//theiheiruefalse123
}
}
StringBuilder
- StringBuilder和StringBuffer都继承了AbstractStringBuilder
- StringBuffer效率低于StringBuilder
- StringBuffer安全性高于StringBuilder
- 一般情况下使用StringBuilder