public static String splitCamelCaseWithSpace(String string) {
return string.replaceAll(
String.format("%s|%s|%s",
"(?<=[A-Z])(?=[A-Z][a-z])",
"(?<=[^A-Z])(?=[A-Z])",
"(?<=[A-Za-z])(?=[^A-Za-z])"),
" ");
}它的运行原理到底是怎样的?
return string.replaceAll(
String.format("%s|%s|%s",
"(?<=[A-Z])(?=[A-Z][a-z])",
"(?<=[^A-Z])(?=[A-Z])",
"(?<=[A-Za-z])(?=[^A-Za-z])"),
" ");
}它的运行原理到底是怎样的?
解决方案 »
- 求思路·······大神吗 赏赐点时间看眼
- 求助,通过SSH协议登录linux服务器的程序
- JFileChooser弹出的文件选择框中“文件名”为空,点击确定按钮如何给予提示“请输入文件名”啊?
- 来看看这个问题,子页面向父页面传值
- 一个急迫的问题,大佬们抽点空帮我看看,小弟先谢谢了
- 请高手们赐教-老师布置的一道有点难的java题
- 为什么不能用"Insert"语句向数据库中插入大字段(比如Image)??
- 如何解决JTable中的字段标识问题?
- JDK与JSP环境变量的设置冲突的问题!!
- 关于java图片上传的!
- spring+hibernate 有些数据往oracle里面插入 sql语句都出来了可是数据库里却没有
- 下面四道题结果为什么是这样的?求分析
整理之后就是:
str.replaceAll("(?<=[A-Z])(?=[A-Z][a-z])|(?<=[^A-Z])(?=[A-Z])|(?<=[A-Za-z])(?=[^A-Za-z])","_");//这里为了效果明显,用_替换空格
主要功能就是匹配到指定的格式后在这个指定位置的前面或者加一个空格,?就是匹配一个特定位置,这里匹配的是位置,也就是说其实不是替换,而且增加""
?=[A-Z]表明匹配的位置是字符满足[A-Z]的范围就可以了.比如"CCbB"就会被匹配三次,
匹配后结果为_C_Cb_B
?=[A-Z][a-z]表明匹配Aa这样的字符串,前面大写,后面小写,"CCbB"就会匹配一次
匹配后结果CC_bB
大家可能注意到了,添加的_都是位于匹配位置的前面的,
如果我想放到后面的话,那么就得
?<=[A-Z][a-z]这样了,
这样的"CCbB"就会匹配一次匹配后结果就为CCb_B
至于|就是或的意思,想必你也了解把。
最后补充下,能写出这样正则的人真不容易,这样的正则的资料网上可真的不好搜。
您说的我大概能理解,当时这个方法解释为可以把“camleCase”变成“camle Case”这种形式。
但是我还是有些地方不了解,希望指点一下。
首先,为什么 ?<=[A-Z] 就可以实现增加,而不是替换?
按照你的说法,应该是满足三个表达式的任意一个都是需要替换的,那如果出现冲突,怎么解决?例如
?=[A-Z]和?=[A-Z][a-z],那匹配的结果是_C_Cb_B还是CC_bB?