【正则表达式】稍复杂的String.split()问题,以“:”分隔,但是可以排除“?:”,可是遇到“??:”的时候又分隔

qyflaoda 2005-06-02 08:54:12
比如字符串“abcd:efg:hig?:klmn”
分隔成
“abcd”
“efg”
“hig?:klmn”
但是字符串“abcd:efg:hig??:klmn”
分隔成
“abcd”
“efg”
“hig??”
“klmn”
以次类推
字符串“abcd:efg:hig???:klmn”
分隔成
“abcd”
“efg”
“hig???:klmn”

总之,奇数个问号后面的“:”不起分隔作用,偶数个问号后面的“:”起分隔作用。
不知有没有好的方案?

...全文
213 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
fog628 2005-06-07
  • 打赏
  • 举报
回复
厉害
qyflaoda 2005-06-02
  • 打赏
  • 举报
回复
谢谢,给分了
treeroot 2005-06-02
  • 打赏
  • 举报
回复
是的,你可以换成其他的字符串,比如 "@#"
querlang 2005-06-02
  • 打赏
  • 举报
回复
学习
qyflaoda 2005-06-02
  • 打赏
  • 举报
回复
可以了,没想到这么快就有成功的方案了,多谢,再问一句,你这个方案关键的一点就是要保证"###"不能在原文中出现,对吗?
treeroot 2005-06-02
  • 打赏
  • 举报
回复
我实在是太喜欢正则表达式了!
treeroot 2005-06-02
  • 打赏
  • 举报
回复
不好意思,改一下就可以了
String delim="###";//设置新的分隔符,你的字符串中不要出现这个!
String s="abcd:efg:hig???:klmn";
String[] arr=s.replaceAll("([^\\?]((\\?)\\3)*):","$1"+delim).split(delim);
qyflaoda 2005-06-02
  • 打赏
  • 举报
回复
偶数个问号的情况分的对了,但是为什么字符少了很多?
qyflaoda 2005-06-02
  • 打赏
  • 举报
回复
好像不对阿
结果是:
abc
ef
hig???:klmn
treeroot 2005-06-02
  • 打赏
  • 举报
回复

String delim="###";//设置新的分隔符,你的字符串中不要出现这个!
String s="abcd:efg:hig???:klmn";
String[] arr=s.replaceAll("[^\\?](((\\?)\\3)*):","$1"+delim).split(delim);
treeroot 2005-06-02
  • 打赏
  • 举报
回复
有解决方案了,这个问题太有挑战性了
treeroot 2005-06-02
  • 打赏
  • 举报
回复
可以实现分隔,但是偶数个问号同时也被当作分隔符号了
对于第二种是:
“abcd”
“efg”
“hig”
“klmn”
hcom 2005-06-02
  • 打赏
  • 举报
回复
up

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧