版权声明:欢迎转载 https://blog.csdn.net/qq_37875585/article/details/88406477
1. 字符串长度和遍历字符串
- 字符串封装了一个长度不可变的char数组
- 每个char字符都存储是Unicode编码
- 字符串的长度,就是其存储的char字符个数
- String提供length()方法可以获取字符串的长度,也就是字符的个数,中文和英文都是一个字符
注意:字符的长度是str.length()方法,数组长度是属性arr.length - length()方法和charAt()方法配合可以用于字符串中字符的遍历
- char c = str.charAt(0); 获取字符串中指定位置的字符
String str = "您好Java"; int n = str.length(); System.out.println(n);//6 char c = str.charAt(0); System.out.println(c);//您 //遍历字符串中字符,输出每个字符的编码 for (int i = 0; i < str.length(); i++) { char ch = str.charAt(i); System.out.println((int)ch); } //char cc = str.charAt(7); //System.out.println(cc);//会抛出IndexOutOfBoundsException
2. 查找字符串在一个目标字符串中的位置
String str = "那年我去了他们家,他说:我去";
//找到第一个匹配的位置,返回起始位置的位置
int index = str.indexOf("我去");
System.out.println(index);//2
//找不到返回-1
int index1 = str.indexOf("你好");
System.out.println(index1);//-1
//重载的indexOf,跳过一些位置开始查找
int index2 = str.indexOf("我去", 3);
System.out.println(index2);//12
//从后往前查询"我去",返回字符串起始位置
int index3 = str.lastIndexOf("我去");
System.out.println(index3);//12
3. 截取字符串
- 截取子字符串
String url = "http://silee.club/index.html"; //截取7到14之间的字符 String host = url.substring(7, 17);//包含开始,不包含结束 //从7开始连续截取4个字符 String name = url.substring(7, 7+5); System.out.println(host); System.out.println(name); //从15开始截取到最后一个字符 String file = url.substring(18); System.out.println(file);
- 案例:动态截取任意URL中的主机名
/** *动态截取任意URL中的主机名 * http://taobao.com/index.html * http://sina.com/index.html * http://silee.club/index.html */ url = "http://sina.com/index.html"; int i = url.indexOf("/", 7); System.out.println(i); String s = url.substring(7, i); System.out.println(s);
4. 去除字符串两端的空白
- 去除字符串两端的空白(编码小于等于32的字符)
- 如果原字符串前后有空白,则返回新字符串;如果前后没有空白,则返回原字符串
String str = " \n silee.club \r \t "; System.out.println(str.length()); String s = str.trim(); System.out.println(s); System.out.println(s.length()); System.out.println(str == s);
5. 检查字符串是否以指定字符串开头
- 检查字符串是否以指定字符串开头
String str = "今天你吃了吗?"; //检查 str 是否以 “今天” 为开头 boolean b = str.startsWith("今天"); System.out.println(b); b = str.startsWith("明天"); System.out.println(b); b = str.startsWith(""); System.out.println(b);
- 案例:
- 检查一个文件是否为 png 图片(后缀为.png)
String file = "demo.docx"; //检查一个文件是否为 png 图片 if(file.endsWith(".png")) { System.out.println("是图片文件"); }else { System.out.println("这不是图片文件"); }
- 检查是否为加密安全通讯(https://开头)
String url = "https://tedu.cn/index.html"; if(url.startsWith("https://")) { System.out.println("这是加密安全通讯"); }else { System.out.println("这不是加密安全通讯"); }
- 检查一个文件是否为 png 图片(后缀为.png)
6. 转换字符串的大小写
- 转换字符串的大小写
String str = "您好Java"; String s = str.toUpperCase(); System.out.println(s); System.out.println(str == s); //false str = "您好JAVA"; s = str.toUpperCase(); System.out.println(s); System.out.println(str==s);
- 案例:不区分大小写比较文件的后缀
String file = "DCIM.Png"; if(file.toLowerCase().endsWith(".png")) { System.out.println("这是图片"); }else { System.out.println("上载错误"); }
7. 可变字符串 StringBuilder
- 其内部的字符数组初始容量为16,后续的操作都可以对这个数组内容进行修改,当容量不够时候会自动扩容,扩容规则为 1倍+2。
- StringBuilder 性能好于 String ,如果有复杂的字符串连接等操作时候,使用 StringBuilder完成。
StringBuilder buf = new StringBuilder(); //capacity 容量,就是StringBuilder中char数组大小 //capacity() 方法用于检测 StringBuilder内部字符数组的容量。 //由于当长度超过数组容量时候会进行自动扩容, //所以这个容量总会大于等于数组长度。 int n = buf.capacity(); System.out.println(n); //16 //append: 追加,append()方法用于向char数组中追加内容 buf.append("小哥哥"); buf.append("在今天早晨出家门的时候"); n = buf.capacity(); System.out.println(n);//16 buf.append("天还没") .append("亮") .append("呢") //发生扩容操作 16变成34 .delete(1,1+2) //删除操作 .insert(1,"美女"); //插入操作 n = buf.capacity(); System.out.println(n);//34 扩容以后的容量 System.out.println(buf);//输出编辑以后的内容
8. 字符串与正则表达式
- boolean matches(String regex),使用给定的正则表达式判断当前字符串是否符合格式要求
String email = "[email protected]"; String regex = "[a-zA-Z0-9]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+"; boolean match = email.matches(regex); if (match) { System.out.println("是邮箱"); } else { System.out.println("不是邮箱"); }
- String[] split(regex) 将当前字符串按照正则表达式部分进行拆分,并返回拆分后的每段内容
/** * 按照数字部分进行拆分,得到所有的字母部分 * 如果拆分过程中连续匹配了两次拆分内容,那么之间会拆分出一个空字符串("") * * 如果是在字符串末尾连续匹配拆分内容则所有拆分出的空字符都会被忽略 * 但如果在字符串开头则不会被忽略,会拆出一个空字符串 */ String str = "jsd82mssd0j2c8ndc9v1"; String[] arr = str.split("[0-9]+"); System.out.println(arr.length); System.out.println(Arrays.toString(arr)); //将图片拆分改名为当前时间的毫秒值 String imageName = "silee.png"; String[] names = imageName.split("\\."); System.out.println(Arrays.toString(names)); imageName = System.currentTimeMillis() + ".png"; System.out.println(imageName); //将毫秒值转为当前时间 names = imageName.split("\\."); long time = Long.parseLong(names[0]); System.out.println(new Date(time));
- String replaceAll(String regex, String str) 将当前字符串中满足正则表达式的部分替换为给定字符串
/** * 将当前字符串的数字替换为#NUMBER# */ String str = "jdsfwef28793jfdm928jd3fe54g"; str = str.replaceAll("[0-9]+", "#NUMBER#"); System.out.println(str);