字符串

字符串(均可以查看API帮助文档查找更多方法):

String

String(字符串不可变,若修改就会new出一个新对象)

(int型)length() 返回字符串长度

(char型)charAt(int index) 取指定索引的字符(索引从 0 开始)

(boolean型)contains(CharSequence s) 判断是否包含指定子串

(boolean型)starsWith(String prefix)/endsWith(String suffix) 判断开头 / 结尾

(boolean型)equals(Object obj)内容相等判断(别用 ==,因为 == 对引用类型比较的是内存地址,而new出来的字符串即使内容相同,也会是不同的对象,地址不同)

(boolean型) equalsIgnoreCase(String another) 忽略大小写比较内容

(boolean型) isEmpty() 判断是否为空字符串

(String型)substring(int beginIndex) 从beginIndex(开始索引)截取到末尾

(String型)substring(int beginIndex, int endIndex) 左闭右开,含头不含尾截取字符串

(String [])split(String regex) 按正则拆分字符串,用 “正则表达式” 作为分隔符,把一个大字符串拆分成多个小字符串,存到数组里。

String str = "a, b; c|d";
String[] result = str.split("[,;|]");
// 正则 [,;|] 表示“逗号、分号、竖线中的任意一个”
// 结果是 ["a", " b", " c", "d"] → 按这几个符号把字符串拆成了4部分

(String型)replace(CharSequence old, CharSequence new) 全量替换(不支持正则)返回替换后的新字符串

String str = "a1b1c1";
String result = str.replace("1", "x");
// 结果是 "axbxcx" → 所有的"1"都被替换成了"x"

(String型)replaceAll(String regex, String replacement) 正则替换,返回正则替换后的新字符串

String str = "a1b22c333";
String result = str.replaceAll("\\d+", "x");
// 正则 \\d+ 表示“一个或多个数字”
// 结果是 "axbxcx" → 不管是1位、2位还是3位数字,都被替换成了"x"

(String型)toLowerCase()/toUpperCase() 转小写 / 大写

(String型)valueOf(任意类型) 静态方法,把其他类型转字符串

参数写法 能接收的类型
CharSequence s String、StringBuilder 等
String prefix 只能是 String
Object obj 任意类型(String、Integer 等)

StringBuilder

可变字符序列,单线程场景首选,效率高,无线程安全保障核心是直接修改本身,不生成新对象,适合频繁拼接 / 修改

构造容器:StringBuilder()/StringBuilder(String init)

append(任意类型) 拼接

insert(int offset, 任意类型) 指定位置(索引)插入内容

delete(int start, int end) 删除指定区间字符(左闭右开)

replace(int start, int end, String str):替换指定区间(左闭右开)

reverse() 字符串反转

toString() 转为 String 类型

可以链式调用

StringJoiner

解决带分隔符拼接(如 a,b,c),无需手动处理首尾分隔符

构造容器:

StringJoiner(分隔符) 仅指定分隔符

StringJoiner(分隔符, 前缀, 后缀):带前后缀

add(String str) 添加单个元素

merge(StringJoiner other) 合并另一个 StringJoiner,other容器放在调用该方法容器的后面

toString() 转为String类型

可以链式调用

方法返回 

在写函数时,如果要返回多个数据,可以把这些数据放在一个容器中(集合,数组),再把容器返回

跳出嵌套循环

在循环执行过程中,如果有循环嵌套,break无法跳出我们想要的循环,就可以在循环体(while,for,switch)前面加上一个标识符和一个冒号(符合标识符命名规范即可,循环就可以叫loop),在break那里,改为break 标识符(break loop;)

当然main方法也是一个线程,我在需要跳出循环处结束main方法这个主线程也可以,因此,把break;替换成return; return 0;正常状态结束,其他数字表示异常状态结束

当然还可以用System.exit(0);来跳出这个虚拟机的运行。

三者前者是跳出标识符运行的线程(后续如果有代码,依然可以运行),中者是跳出main函数,主线程结束,后者是跳出整个Java虚拟机,整个程序立刻结束

正则表达式

基础匹配符

符号 含义 示例
. 匹配任意单个字符(除了换行符) a.c 匹配 abca1ca c
[] 匹配方括号内的任意一个字符 [abc] 匹配 ab 或 c
[^] 匹配不在方括号内的任意一个字符 [^abc] 匹配除 abc 之外的字符
- 在[]中表示范围 [a-z] 匹配小写字母,[0-9] 匹配数字

预定义字符集

符号 含义
\d 匹配数字(等价于 [0-9]
\D 匹配非数字(等价于 [^0-9]
\w 匹配字母、数字、下划线(等价于 [a-zA-Z0-9_]
\W 匹配非字母、数字、下划线
\s 匹配空白字符(空格、制表符、换行等)
\S 匹配非空白字符

数量限定符

用来指定前面的字符或组要出现多少次

符号 含义 示例
* 匹配 0 次或多次 a* 匹配 ""aaaaaa...
+ 匹配 1 次或多次 a+ 匹配 aaaaaa...
? 匹配 0 次或 1 次 a? 匹配 "" 或 a
{n} 精确匹配 n 次 a{3} 匹配 aaa
{n,} 匹配至少 n 次 a{2,} 匹配 aaaaa...
{n,m} 匹配 n 到 m 次 a{2,4} 匹配 aaaaaaaaa

边界匹配符

用来定位字符串的位置,不匹配任何字符

符号 含义 示例
^ 匹配字符串的开头 ^abc 匹配以 abc 开头的字符串
$ 匹配字符串的结尾 abc$ 匹配以 abc 结尾的字符串
\b 匹配单词边界(比如空格、标点) \bcat\b 匹配独立的 cat,不匹配 category 里的 cat

逻辑与分组

符号 含义 示例
() 分组,把多个字符当作一个整体处理 (ab)+ 匹配 abababababab...
` ` 或,匹配左右任意一个表达式 `a b匹配ab`
\num 引用第 num 个分组的内容(反向引用) (a)\1 匹配 aa

 转义字符

如果想匹配 .*( 这类有特殊含义的符号,需要在前面加 \ 进行转义。匹配小数点 . 要写成 \.;匹配星号 * 要写成 \*

常见示例

匹配手机号 ^1[3-9]\\d{9}$
匹配邮箱 ^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*$
匹配 URL ^https?://[\\w-]+(\\.[\\w-]+)+(/[\\w-./?%&=]*)?$

匹配18 位身份证

^[1-9]\\d{5}(18|19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])\\d{3}([0-9Xx])$

使用方法

场景 代码实例
验证格式 String regex = "你的正则"; boolean legal = 目标字符串.matches(regex);
替换内容 String result = 目标字符串.replaceAll("你的正则", "替换后的内容");
拆分字符串 String[] arr = 目标字符串.split("你的正则");
提取内容 Pattern p = Pattern.compile("你的正则"); Matcher m = p.matcher(目标字符串); while(m.find()) { System.out.println(m.group()); }

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐