首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >string-manipulation -从字符串中删除字符

string-manipulation -从字符串中删除字符
EN

Stack Overflow用户
提问于 2010-06-25 23:04:03
回答 4查看 969关注 0票数 2

我目前在java中有以下字符串:

代码语言:javascript
复制
"Blah, blah, blah,~Part One, Part Two~,blah blah"

我需要删除~字符之间的逗号,这样它才能读取。

代码语言:javascript
复制
"Blah, blah, blah,~Part One Part Two~,blah blah"

有谁能帮帮我吗?

非常感谢,

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-06-25 23:28:27

代码语言:javascript
复制
    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"
            )
        );
    }

上面的打印结果:

代码语言:javascript
复制
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种情况:

我们在字符串的开头,“”

  • 只是匹配,直到我们找到第一个~,所以下一次我们将是“

  • so,

如果字符串的末尾有偶数个匹配,我们就会一直匹配到字符串的末尾,所以,([^~]*$),,

  • ~,,
    • ,So,~

    • ,So,
    • ~

    • ~

    • ,So

如果以上都不是,我们在“内部”,继续寻找~之前的下一个逗号(所以我们仍然在“内部”)

  • So,([^,~]*), (([^,~]*),(

代码语言:javascript
复制
- If we find `~` instead of a comma, then go out, then go back in on the next `~` 
    - So, `([^,~]*~[^~]*~)`

在所有情况下,我们都要确保捕获到足够的数据来重建字符串。

参考文献

Grouping and backreferences

  • regular-expressions.info/Character ClassesAnchors

相关问题

票数 5
EN

Stack Overflow用户

发布于 2010-06-25 23:21:47

我还没有对此进行测试,但我会这样做:

代码语言:javascript
复制
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上找到。

票数 0
EN

Stack Overflow用户

发布于 2010-06-25 23:31:39

代码语言:javascript
复制
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();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3119068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档