java 正则 竖线_Java 中正则表达式如何匹配竖线(|) , 以及在 Kotlin 中是如何改进的?...
Java 中正则表达式如何匹配竖线(|)
在Java中直接调用String的split方法:
val b = java.lang.String(a)
val s3 = b.split("|") // ["a","b","c","|","1","2","3","4"]
println(JSON.toJSONString(s3))
因为 | 在正则表达式中是或的概念,要想匹配就得用转移字符 "|" 但是 "" 又是java的转移字符,要让其在正则中起作用,就得使用: "\|"
val b = java.lang.String(a)
val s3 = b.split("|")
println(JSON.toJSONString(s3)) // ["a","b","c","|","1","2","3","4"]
val s4 = b.split("\\|")
println(JSON.toJSONString(s4)) // ["abc","1234"]
这个Java 中的 split 方法设计简直就是一个"天坑"(天然的坑): 如果不看实现代码,很容易犯错.
public String[] split(String regex) {
return split(regex, 0);
}
public String[] split(String regex, int limit) {
/* fastpath if the regex is a
(1)one-char String and this character is not one of the
RegEx's meta characters ".$|()[{^?*+\\", or
(2)two-char String and the first char is the backslash and
the second is not the ascii digit or ascii letter.
*/
char ch = 0;
if (((regex.value.length == 1 &&
".$|()[{^?*+\\".indexOf(ch = regex.charAt(0)) == -1) ||
(regex.length() == 2 &&
regex.charAt(0) == '\\' &&
(((ch = regex.charAt(1))-'0')|('9'-ch)) < 0 &&
((ch-'a')|('z'-ch)) < 0 &&
((ch-'A')|('Z'-ch)) < 0)) &&
(ch < Character.MIN_HIGH_SURROGATE ||
ch > Character.MAX_LOW_SURROGATE))
{
int off = 0;
int next = 0;
boolean limited = limit > 0;
ArrayList list = new ArrayList<>();
while ((next = indexOf(ch, off)) != -1) {
if (!limited || list.size() < limit - 1) {
list.add(substring(off, next));
off = next + 1;
} else { // last one
//assert (list.size() == limit - 1);
list.add(substring(off, value.length));
off = value.length;
break;
}
}
// If no match was found, return this
if (off == 0)
return new String[]{this};
// Add remaining segment
if (!limited || list.size() < limit)
list.add(substring(off, value.length));
// Construct result
int resultSize = list.size();
if (limit == 0) {
while (resultSize > 0 && list.get(resultSize - 1).length() == 0) {
resultSize--;
}
}
String[] result = new String[resultSize];
return list.subList(0, resultSize).toArray(result);
}
return Pattern.compile(regex).split(this, limit);
}
在Kotlin 中, 直接优化了这个 split 方法:
val a = "abc|1234"
val s1 = a.split("|")
val s2 = a.split("\\|")
println(s1) // [abc, 1234]
println(s2) // [abc|1234]
Kotlin 开发者社区
国内第一Kotlin 开发者社区公众号,主要分享、交流 Kotlin 编程语言、Spring Boot、Android、React.js/Node.js、函数式编程、编程思想等相关主题。
Kotlin 开发者社区
本文分享 CSDN - 东海陈光剑。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
java 正则 竖线_Java 中正则表达式如何匹配竖线(|) , 以及在 Kotlin 中是如何改进的?...相关推荐
- java正则 链接_Java使用正则表达式匹配获取链接地址的方法示例
本文实例讲述了Java使用正则表达式匹配获取链接地址的方法.分享给大家供大家参考,具体如下: 获取页面中字符串的url地址我们都会使用正则表达式来匹配获取了,下面我来给大家总结几个匹配获取链接地址示例 ...
- java 正则 捕获_Java通过正则表达式捕获组中的文本
1.简介 Java 正则表达式如何捕获组中的文本 ?--请看下文. 2.代码 /** * 版权所有 编程十万个怎么办(www.tah1986.com) */ public class Capturin ...
- java 正则 小数_java用正则表达式判断是否是小数的方法
java用正则表达式判断是否是小数的方法 发布时间:2020-06-23 19:57:04 来源:亿速云 阅读:319 作者:Leah 这篇文章将为大家详细讲解有关java用正则表达式判断是否是小数的 ...
- java正则测试_Java的正则表达式
Java正则表达式:定义了字符串的模式:可以用来搜索.编辑.或处理文本: 指定为字符串的正则表达式必须首先被编译为此类的实例.然后将得到的模式用于创建Matcher对象,依照正则表达式,该对象可以与任 ...
- java中正则全局匹配_JS中正则表达式全局匹配模式/g用法实例
JS中正则表达式全局匹配模式 /g用法详解 本文章来详细介绍js中正则表达式的全局匹配模式 /g用法, var str = "123#abc"; var re = /abc/ig; ...
- java 正则 空格_java 正则匹配空格字符串 正则表达式截取字符串
java 正则匹配空格字符串 正则表达式截取字符串 需求:从一堆sql中取出某些特定字符串: 比如配置的sql语句为:"company_code = @cc and project_id = ...
- java正则任意字符_正则表达式匹配任意字符(包括换行符)的写法
今天在Java中想使用正则表达式来获取一段文本中的任意字符.于是很随意得就写出如下匹配规则: (.*) 结果运行之后才发现,无法获得换行之后的文本.于是查了一下手册,才发现正则表达式中,". ...
- java 正则 单个字符_正则表达式教程之匹配单个字符详解
本文实例讲述了正则表达式教程之匹配单个字符.分享给大家供大家参考,具体如下: 注:在所有例子中正则表达式匹配结果包含在源文本中的[和]之间,有的例子会使用Java来实现,如果是java本身正则表达式的 ...
- java 正则 实例_Java正则表达式实例详解
创建正则表达式 你可以从比较简单的东西入手学习正则表达式.要想全面地掌握怎样构建正则表达式,可以去看JDK 文档的java.util.regex 的Pattern 类的文档. 字符 B 字符B \xh ...
- java正则出现次数_正则表达式(二)—匹配次数的正则
正则表达式 匹配次数的正则 在前一篇文章中,我们总结了和位置相关的正则,在这篇文章中,我们将继续学习正则表达式其它的内容. 假如现在给你一个regular_1.txt文件,让你找出含有连续2个a的行, ...
最新文章
- AI换脸、声音篡改等,明确写入新版《民法典》
- 假期三天,我肝了万字的Java垃圾回收,看完你还敢说不会?
- world scientific is the journal to follow
- MYSQL 加密函数的用法
- maven找到mysql 连接池_在Tomcat6.0+MySQL5.0环境下配置和使用数据库连接池
- Hive2.1.1、Hadoop2.7.3 部署
- Java环境配置及第一个HelloWord(Win)
- android studio安装Kotlin(零)
- 10. 王道考研-树与二叉树
- 易语言静态连接器提取_vc98linker修复静态|易语言vc98linker静态连接器迷你版_最火软件站...
- 【基础语法】C语言编写贪吃蛇游戏
- mysql事务prepare_mysql之 事务prepare 与 commit 阶段分析
- luogu P4315 月下“毛景树”
- 百万亚瑟王无法连接服务器请在信号良好的地方重试,乖离性百万亚瑟王无法匹配怎么解决 匹配失败原因和解决方法...
- python dis模块
- H5性能测试入门及优化建议
- 实验八 页面置换模拟程序设计
- V-for and slot-scoped报错问题
- 慎用还原Wpa.dbl文件
- ns-3的绘图工具——Gnuplot
热门文章
- Vue项目中应用“策略模式”
- python实现对图片的一些简单处理
- 【大厂面试】面试官看了赞不绝口的Redis笔记(三)分布式篇
- php 对接 hotmail邮箱,php 模拟GMAIL,HOTMAIL(MSN),YAHOO,163,126邮箱登录的详细介绍
- ArcGIS中.shp矢量文件和.lyr图层文件的区别
- 视频监控直播项目经验总结
- HTML hr 标签的用法
- UCloud宗泽:区块链安全现状堪忧,泡沫与价值并存
- 2023广东海洋大学计算机考研信息汇总
- html做战网首页,战网更新agent一半不动