String类
目录
前言
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、字符串的常见操作
1.字符串比较
1.1 比较相等
== :比较身份相等
.equals :比较内容相等
1.2 比较大小
String a = "hello";
String b = "hallo";
//compareTo 返回的是一个int
//如果 a 比 b 小,返回一个比0小的数
//如果 a 比 b 大,返回一个比0大的数
//如果 a 和 b 相等,返回0
//返回的结果并不是 1/-1,而是一个比0大或者比0小的值
int result = a.compareTo(b);
System.out.println(result);
运行结果:
1.3 不区分大小写的比较
字符串大小判定的规则:字典序(先比较首个字符的大小,即比较的是unicode码的大小)。
若首个字符可以比较出大小,则可比较出字符串的大小,否则按照此规则比较下一位。
- 区分大小写
String a = "Hello";
String b = "hello";
int result = a.compareTo(b);
System.out.println(result);
运行结果:
- 不区分大小写
String a = "Hello";
String b = "hello";
int result = a.compareToIgnoreCase(b);
System.out.println(result);
运行结果:
2.字符串查找
查找子串
String a = "hello world";
String b = "world";
System.out.println(a.contains(b));
运行结果:
String a = "hello world";
String b = "worlda";
System.out.println(a.contains(b));
查找子串首次出现的位置
String a = "hello world";
String b = "world";
System.out.println(a.indexOf(b));
运行结果:
- Tips:使用 indexOf 返回的是子串起始位置的下标,若有多个子串,返回最左边子串的下标。
- 若没找到,则返回-1;
从指定位置开始查找
String a = "hello world world";
String b = "world";
int result = a.indexOf(b);
System.out.println(result);
result = a.indexOf(b,result + 1);
System.out.println(result);
运行结果:
从右往左查找
String a = "hello world world";
String b = "world";
System.out.println(a.lastIndexOf(b));
运行结果:
判断是否以指定字符开头
String a = "hello world world";
String b = "world";
System.out.println(a.startsWith(b));
System.out.println(a.endsWith(b));
运行结果:
实用场景
1、判断某个链接的协议类型,会使用 startWith。
https://editor.csdn.net/md?articleId=114338363
判断该网址是否是 https 协议开头
2、判断某个文件的类型,会使用 endWith 判断拓展名。
3.字符串替换
- 由于 String 是不可变对象,针对字符串的替换操作,并没有修改字符串本身,而是生成了一个新的字符串。
被指定全部替换
String a = "hello world world";
String b = "world";
String result = a.replaceAll(b,"java");
System.out.println(result);
运行结果:
被指定首内容替换
String a = "hello world world";
String b = "world";
String result = a.replaceFirst(b,"java");
System.out.println(result);
运行结果:
- Tips:String.regex: 正则表达式(包含一些特殊字符的字符串):使用一些特殊的字符,来描述某些字符串的筛选标准。例如:以XXX开头,以XXX结尾,XXX出现了N次。
4.字符串拆分
按照一定的分割符,把字符串分成几个部分。把这些部分放到一个数组中。
String a = "hello world java";
String[] result = a.split(" ");
System.out.println(Arrays.toString(result));
运行结果:
String a = "192.168.0.1";
//正则表达式中有很多特殊的字符,包括“.”
//若要使用该特殊表达式,需要使用"正则表达式"中的转义字符\
//正则表达式中,将‘.’当做特殊字符
//正则表达式中,将‘\.’当做‘.’
//java中,又把\当做了转义字符,若要使用\,则需要再对其转义
String[] result = a.split("\\.");
System.out.println(Arrays.toString(result));
运行结果:
5.字符串截取
String a = "hello world java";
System.out.println(a.substring(6,11));
System.out.println(a.substring(6));
运行结果:
6.其他操作
6.1 去掉字符串中的左右空格
- 空白符:空格,换行,回车,制表符,翻页符,垂直制表符…
String a = " hello world \n";
System.out.println(a);
System.out.println("[" + a.trim() + "]");
运行结果:
6.2 字符串转大小写
String a = "Hello";
System.out.println(a.toUpperCase());
System.out.println(a.toLowerCase());
运行结果:
6.3 判断是否是空串–isEmpty
String a = ""; //空字符串
String b = null; //空引用
- 将字符串看做一个装字符的盒子的话,空字符串是空盒子,空引用是连盒子都没有。
- 字符串入池操作
其中的native表示本地方法,即:该方法不是用Java实现的,而是使用JDK的语言实现的。
7.StringBuffer 和 StringBuilder
- 因为 String 是不可变对象,不能直接修改其内容,若要修改,则需要使用 StringBuffer 和 StringBuilder。
//append 使用 append 能够把字符串内容进行追加,相当于 String 的+=
//String 的 += 会产生新的 String 对象,如果在循环中使用,是比较低效的
String str = "hello";
for (int i = 0; i < 100; i++) {
str += i;
}
StringBuilder stringBuilder = new StringBuilder("hello");
for (int i = 0; i < 100; i++) {
stringBuilder.append(i);
//调用 append 就是直接把参数拼接到原来内存的末尾了
//如果 append 的时候拼接的内容太多,StringBuilder 会自动扩容
// 虽然扩容操作比较低效,但是触发频率不高
}
7.1 字符串翻转
StringBuilder stringBuilder = new StringBuilder("hello");
stringBuilder.reverse();
System.out.println(stringBuilder.toString());
运行结果:
7.2 删除操作
StringBuilder stringBuilder = new StringBuilder("hello");
stringBuilder.delete(2, 4);
System.out.println(stringBuilder.toString());
运行结果:
7.2 插入数据
StringBuilder stringBuilder = new StringBuilder("hello");
stringBuilder.insert(2, "u");
System.out.println(stringBuilder.toString());
运行结果:
- StringBuilder 和 StringBuffer 的区别:
StringBuilder 是线程不安全的
StringBuffer 是线程安全的