字符串的常量:底层使用一个被final修饰的char类型数组存储字符,初始化赋值之后,不可改变(每次改变String类型的值,都会在内存中新建一个对象)。
常用的方法:
1 构造方法:
//根据底层的实现原理来创建
String str = new String(new char[] {'1','2','3'});
//常用方式
String str = "123";
String str = new String("123")
2 获取字符串的长度.length()
String str = "123";
System.out.println(str.length());//3
3 获取指定索引位置的字符.charAt(int index)
String str = "hello world 你好 世界";
System.out.println(str.chatAt(4));//o
4 返回字符串对应的字符数组.toCharArray()
String str = "123";
char[] charArray = str.toCharArray();
5 比较字符串是否相同.equals(Object obj)\equalsIgnoreCase(String str)
String str = "hello world";
System.out.println(str.equals("Hello World"));//false
System.out.println(str.equalsIgnoreCase("Hello World"));//true
6 将字符串转为大写或者小写.toLowerCase()\toUpperCase()
String str = "Hello";
System.out.println(str.toLowerCase);//hello
System.out.println(str.toUpperCase);//HELLO
7 字符串拼接(通过创建新的字符数组,拼接数组内容).concat(String str)
String str = "hello";
String newStr = str.concat(" java");
System.out.println(newStr);//hello java
8 查找指定字符或者字符串第一次出现的位置的索引.indexOf(…)\lastIndexOf(…)
String str = "hello";
//正序查找
int index1 = str.indexOf('l');
//倒叙查找,也是按照正序的索引来标记的
int index2 = str.lastIndexOf('l');
//查找字符串
int index3 = str.indexOf("lo");
//从指定的索引处开始查找
int index4 = str.indexOf('l',3);
System.out.println(index1);//2
System.out.println(index2);//3
System.out.println(index3);//3
System.out.println(index4);//3
9 将基本数据类型转化为字符串.valueOf()
String str = String.valueOf(1234);
10 判断是否包含指定的字符串.contains(String str)
String str = "hello world";
boolean result = str.contains("hello");
System.out.println(result);//true
11 去除首位空格.trim()
String str = " hello java ";
String newStr = str.trim();
System.out.println(newStr);//hello java
12 按照正则表达式拆分字符串.split()
String str = "hello,java";
String[] strArray = str.split(",");
System.out.println(Arrays.toString(strArray));//[hello,java]
13 切割字符串.substring(int beginIndex)\substring(int beginIndex, int endIndex)
String str = "hello java";
String newStr1 = str.substring(5);//包含索引为5的字符
System.out.println(newStr1);// java
String newStr2 = str.substring(0,5);//包前不包后
System.out.println(newStr2);//hello
14 替换字符.replace/.replaceAll(String regex, String replacement)
String str = "hello";
String newStr = str.replace('l' , 'L');
System.out.println(newStr);//heLLo
replaceAll(String regex, String replacement)//利用正则表达式去替换
15 判断字符串是否包含指定的前缀或者后缀.startsWith(String prefix)\endsWith(String suffix)
String str = "hello world";
System.out.println(str.startsWith("he"));//true
System.out.println(str.endsWith("ld"));//true
练习:
利用String类解析json字符串去创建3个Student对象
/**
* Student类
*/
public class Student {
private String name;
private int age;
private String sex;
//省去getter/setter,构造方法
}
/**
*拆分json字符串
*/
public static void main(String[] args) {
String str = "[{name:junki,age:18,sex:male},{name:lucy,age:16,sex:female},{name:tom,age:20,sex:male}]";
str = str.substring(str.indexOf("[") + 1, str.indexOf("]"));
str = str.replace("{", "");
String[] newStr = str.split("},");
Student[] stu = new Student[newStr.length];
for (int i = 0; i < newStr.length; i++) {
String name = newStr[i].substring(newStr[i].indexOf("name:")+5,newStr[i].indexOf(",age"));
int age = Integer.parseInt(newStr[i].substring(newStr[i].indexOf("age:")+4,newStr[i].indexOf(",sex")));
String sex = newStr[i].substring(newStr[i].indexOf("sex:")+4,newStr[i].length());
stu[i] = new Student(name,age,sex);
}
System.out.println(Arrays.toString(stu));
}
在解析json字符串时,我们可以利用alibaba的Fastjson.jar
public void test2() {
String jsonStr = "[{name:'junki',age:18,sex:'male'},{name:'lucy',age:16,sex:'female'},{name:'tom',age:20,sex:'male'}]";
//在后面利用反射填写实体类可以自动创建对象
List<Student> stuList = JSON.parseArray(jsonStr, Student.class);
System.out.println(stuList);
//加上true可以帮我们打印处可视化的json格式数据
String jsonString = JSON.toJSONString(stuList, true);
System.out.println(jsonString);
}