1.定义字符串
一般情况下有两种情况可以定义字符串:
- 通过直接复制定义(推荐):
String name = "zhangsan";
直接赋值出来的字符串存储在串池里面,如果定义同样内容的字符串,直接复制可以节省内存。
String name = "zhangsan"; String nm = "zhangsan";
- 通过new出来定义(不常用,而且不节省内存):
String name = new String("zhangsan");
2.字符串比较
一般情况下不能直接使用
==来比较字符串,因为如果这两个字符串是直接赋值定义的,==可以正确比较。如果是用new关键字定义的,==不能正确比较。
所以注意:不建议使用==比较字符串。
为什么会这样呢?
这是直接赋值的字符串的存储逻辑,所以说直接赋值的字符串是可以正确比较。
但是new出来的字符串是在堆内存中开辟新的内存空间,所以每个new出来的字符串虽然长得一样,但是地址值不一样,要记住引用数据类型比较的是地址值
比如:
String name = new String("zhangsan");
String nm = new String("zhangsan");
System.out.println(name==nm);
最终输出的结果是false。
字符串比较工具方法
Java给我们提供了两个比较字符串的方法:
| boolean equals(要比较的字符串) | 完全一样结果才true,否则为false。 |
|---|---|
| boolean equalsIgnoreCase(要比较的字符串) | 忽略大小写比较。 |
String name = new String("zhangsan");
String nm = new String("ZHANGSAN");
System.out.println(name.equals(nm));
输出false。
String name = new String("zhangsan");
String nm = new String("ZHANGSAN");
System.out.println(name.equalsIgnoreCase(nm));
输出true。
3.遍历字符串
遍历字符串我们用到一下方法
| public char charAt(int index) | 根据索引返回字符 |
|---|---|
| public int length() | 返回字符串的长度(注意是length(),有括号) |
比如:
public class Demo01 {
public static void main(String[] args) {
String name = new String("zhangsan");
for (int i = 0; i< name.length(); i++) {
System.out.println(name.charAt(i));
}
}
}
4.StringBuilder
StringBuilder可以看作是一个容器,创建之后里面的内容是可变的。因为我们都知道,一个普通字符串的内容是不可变的,有些操作比较麻烦。
作用:提高字符串的操作效率。
创建StringBuilder
StringBuilder sb = new StringBuilder("zhangsan");
StringBuilder成员方法
5.常用的字符串方法
①英文大写转换
String name = "zhangsan";
String resultString = name.toUpperCase();
System.out.println(resultString);
输出:ZHANGSAN
②英文小写转换
String name = "ZHANGSAN";
String resultString = name.toLowerCase();
System.out.println(resultString);
输出:zhangsan
③字符串截取substring
substring(beginIndex):从指定的beginIndex开始,到字符串的末尾,返回一个新的字符串(包含beginIndex)
String s = "hello world";
String sub = s.substring(6);
System.out.println(sub);
输出:world
substring(beginIndex,endIndex):从beginIndex开始(包括beginIndex处的字符),到endIndex结束(不包括endIndex处的字符),返回一个新的字符串。
String s = "hello world";
String sub = s.substring(6,11);
System.out.println(sub);
输出:world
④lastIndexOf查找字符最后出现的位置
String s = "hello world";
int index = s.lastIndexOf("o");
System.out.println(index);
输出:7
⑤split字符串分割
split() 方法用于根据指定的分隔符将字符串分割成一个有序的子串列表,并将其放入一个数组中,然后返回这个数组1。
比如:
String s = "hello world";
String[] chars = s.split("o");
for (String c: chars) {
System.out.println(c);
}
}
输出:
hell
w
rld
比如下面这是阿里云oss上传文件以后返回文件地址:
ENDPOINT = https://oss-cn-beijing.aliyuncs.com
BUCKET_NAME = blog-ultimate
要求返回这样的地址:
https://blog-ultimate.oss-cn-beijing.aliyuncs.com/88224a5c-7a11-4457-b6e7-65b40091b1a5.png
我们可以这样写:
String url = ENDPOINT.split("//")[0] + "//" + BUCKET_NAME + "." + ENDPOINT.split("//")[1] + "/" + fileName;
⑥isEmpty判断字符串是否为空
String 类的 isEmpty() 方法是一个原生方法,用来判断一个字符串是否为空。具体来说,它会检查字符串是否为 null 或者其长度是否为 0。
String str1 = "";
String str2 = " ";
String str3 = "Hello";
String str4 = null;
System.out.println(str1.isEmpty()); // true,空字符串
System.out.println(str2.isEmpty()); // false,非空字符串
System.out.println(str3.isEmpty()); // false,非空字符串
System.out.println(str4.isEmpty()); // 会抛出 NullPointerException
6.spring框架提供的字符串操作方法
spring boot写项目的过程中,我们老师会用一些spring框架给我们提供的String操作方法。
①hasLength()
检查字符串是否非 null 且长度大于 0。
StringUtils.hasLength(str);