Java学习字符串之方法返回、跳出嵌套循环及正则表达式
字符串
字符串(均可以查看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 匹配 abc、a1c、a c |
| [] | 匹配方括号内的任意一个字符 | [abc] 匹配 a、b 或 c |
| [^] | 匹配不在方括号内的任意一个字符 | [^abc] 匹配除 a、b、c 之外的字符 |
| - | 在[]中表示范围 | [a-z] 匹配小写字母,[0-9] 匹配数字 |
预定义字符集
| 符号 | 含义 |
| \d | 匹配数字(等价于 [0-9]) |
| \D | 匹配非数字(等价于 [^0-9]) |
| \w | 匹配字母、数字、下划线(等价于 [a-zA-Z0-9_]) |
| \W | 匹配非字母、数字、下划线 |
| \s | 匹配空白字符(空格、制表符、换行等) |
| \S | 匹配非空白字符 |
数量限定符
用来指定前面的字符或组要出现多少次
| 符号 | 含义 | 示例 |
| * | 匹配 0 次或多次 | a* 匹配 ""、a、aa、aaa... |
| + | 匹配 1 次或多次 | a+ 匹配 a、aa、aaa... |
| ? | 匹配 0 次或 1 次 | a? 匹配 "" 或 a |
| {n} | 精确匹配 n 次 | a{3} 匹配 aaa |
| {n,} | 匹配至少 n 次 | a{2,} 匹配 aa、aaa... |
| {n,m} | 匹配 n 到 m 次 | a{2,4} 匹配 aa、aaa、aaaa |
边界匹配符
用来定位字符串的位置,不匹配任何字符
| 符号 | 含义 | 示例 |
| ^ | 匹配字符串的开头 | ^abc 匹配以 abc 开头的字符串 |
| $ | 匹配字符串的结尾 | abc$ 匹配以 abc 结尾的字符串 |
| \b | 匹配单词边界(比如空格、标点) | \bcat\b 匹配独立的 cat,不匹配 category 里的 cat |
逻辑与分组
| 符号 | 含义 | 示例 | ||
| () | 分组,把多个字符当作一个整体处理 | (ab)+ 匹配 ab、abab、ababab... | ||
| ` | ` | 或,匹配左右任意一个表达式 | `a | b匹配a或b` |
| \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()); } |
总结
到此这篇关于Java学习字符串之方法返回、跳出嵌套循环及正则表达式的文章就介绍到这了,更多相关Java字符串方法返回、跳出嵌套循环及正则内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Java内存模型(JMM)及happens-before原理
这篇文章主要介绍了java内存模型(JMM)及happens-before原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下2020-04-04
解决java.lang.ClassCastException的java类型转换异常的问题
这篇文章主要介绍了解决java.lang.ClassCastException的java类型转换异常的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2020-09-09


最新评论