我目前在java中有以下字符串:
"Blah, blah, blah,~Part One, Part Two~,blah blah"我需要删除~字符之间的逗号,这样它才能读取。
"Blah, blah, blah,~Part One Part Two~,blah blah"有谁能帮帮我吗?
非常感谢,
发布于 2010-06-25 23:28:27
String[] tests = {
"a,b,c,d,e,f",
"a,b,~c~,d,e",
"~a,b,c,d,e~",
"a,b,c,~d,e,f~,g,h,i,~j,k,l,~m,n,o~,q,r,~s,t,u",
};
for (String test : tests) {
System.out.println(
test.replaceAll(
"(^[^~]*~)|([^~]*$)|([^,~]*),|([^,~]*~[^~]*~)",
"$1$2$3$4"
)
);
}上面的打印结果:
a,b,c,d,e,f
a,b,~c~,d,e
~abcde~
a,b,c,~def~,g,h,i,~jkl~m,n,o~qr~s,t,u它是如何工作的
有4种情况:
我们在字符串的开头,“”
~,所以下一次我们将是“”
如果字符串的末尾有偶数个匹配,我们就会一直匹配到字符串的末尾,所以,([^~]*$),,
~,,~,,
~,,
~,,
如果以上都不是,我们在“内部”,继续寻找~之前的下一个逗号(所以我们仍然在“内部”)
([^,~]*), (([^,~]*),(
- If we find `~` instead of a comma, then go out, then go back in on the next `~`
- So, `([^,~]*~[^~]*~)`
在所有情况下,我们都要确保捕获到足够的数据来重建字符串。
参考文献
Grouping and backreferences,
相关问题
发布于 2010-06-25 23:21:47
我还没有对此进行测试,但我会这样做:
string sample = "Blah, blah, blah,~Part One, Part Two~,blah blah";
Regex r = new Regex("(.+)\\~(.+),(.+)\\~(.+)","${1}~${2}${3}~${4}");
r.replaceAll(sample );我引用了Regular Expressions in Java。在这里,.+匹配一个或多个任意字符。更多这样的模式可以在here上找到。
发布于 2010-06-25 23:31:39
String text = "Blah, blah, blah,~Part One, Part Two~,blah blah,~Part One, Part Two~,blah blah";
Pattern pattern = Pattern.compile("~[^~]+~");
Matcher matcher =pattern.matcher(text);
StringBuffer sb = new StringBuffer();
while(matcher.find()) {
matcher.appendReplacement(sb, matcher.group(0).replaceAll(",", ""));
}
matcher.appendTail(sb);
text = sb.toString();https://stackoverflow.com/questions/3119068
复制相似问题