从字符串中删除或替换所有逗号和空格。

4

你好,我正在开发Android应用程序。现在我遇到了一个问题。让我举个例子来说明我的问题。

我有的是:kushal,mayurv,narendra,dhrumil,mark,,,,,,

我想要的是:kushal,mayurv,narendra,dhrumil,mark

希望可以得到任何帮助。


如果您的编程问题中输入和输出字符串相同,则无需进行任何操作,直接使用相同的字符串即可。 - Sunil Kumar Sahoo
@SunilKumar:这些字符串不一样,我想删除“mark”单词后面的所有空格和逗号。 - Kushal Shah
为什么需要标记词?你需要前五个单词吗? - user949300
没有固定大小的单词,也没有任何单词。 - Kushal Shah
第一眼很难发现 :) - nuala
7个回答

5
使用正则表达式来解决问题。您想删除所有后跟空格或另一个逗号的逗号。您还想删除所有不后跟字母的逗号。
在Android中使用正则表达式
yourstring = yourstring.replaceAll("( ,)|(,,)", ""); 

类似这样的东西,很抱歉我无法为您提供更多帮助。


我不知道正则表达式的用途,你能帮我吗? - Kushal Shah
你需要创建一个模式,这是一个正则表达式来解决这个问题。请阅读有关正则表达式的内容,你会有一个想法。 - rfsk2010
在你的模式中,你应该测试3种情况:逗号后跟空格,逗号后跟另一个逗号和逗号后跟字符串结尾。用空字符串替换所有这些情况应该能完成任务。 - nuala
确定我们要删除所有不跟随字母的逗号吗?例如,“nickName,77FreeStyler1337”会引起问题。 - nuala

5
尝试使用以下代码删除所有不需要的逗号和空格
String str = "kushal,mayurv,narendra,dhrumil,mark, ,,,, ";
        String splitted[] = str.split(",");
        StringBuffer sb = new StringBuffer();
        String retrieveData = "";
        for(int i =0; i<splitted.length; i++){
            retrieveData = splitted[i];
            if((retrieveData.trim()).length()>0){

                if(i!=0){
                    sb.append(",");
                }
                sb.append(retrieveData);

            }
        }

    str = sb.toString();
    System.out.println(str);

3
在我自己尝试过之后,这个方法似乎很好用。假设你要对一个名为 myString 的字符串进行操作:
    // replace all consecutive spaces and commas by a space and a comma respectively
    String sanitizedString = myString.replaceAll("\\s+", " ").replaceAll(",+", ",");

    // replace all resulting comma and space combinations
    sanitizedString = sanitizedString.replaceAll("( , )+|( ,)+|(, )+", ",").replaceAll(",+", ",");

    // remove leading and trailing commas (if any)
    sanitizedString = sanitizedString.replaceFirst("^,", "").replaceFirst(",$", "");

    // add a space between comma (merely for readability) **** optional ****
    sanitizedString = sanitizedString.replace(",", ", ");

2
您可以尝试这个方法,虽然不是一个完美的解决方案,但在您的情况下会起作用。
String str = "kushal,mayurv,narendra,dhrumil,mark, ,,,, ,";

String new_str = str.replaceAll(","," "); //replace , with space

String temp = new_str.trim();             //remove trailing space

System.out.println(temp.replaceAll(" ",",")); // now replacing space with ,

1
通常情况下,使用正则表达式的replaceAll()方法是最好的选择。但是,在您的情况下,您最终是否想要一个由单个字符串组成的数组?例如,相当于
new String[] { "kushal", "mayurv", "narendra", "dhrumil", "mark" }  ?

如果是这样,你可以这样做

String[] split = yourString.split(",");

但是要非常仔细地遍历split并查找空字符串。

...

我看到Sunil比我先回答了 - 去看看那个答案。


1

看起来您正在尝试删除字符串末尾的逗号和空格,这可能是您要寻找的内容,此模式很有用[, ]+$

Pattern p = Pattern.compile("[, ]+$");
Matcher m = p.matcher("kushal,mayurv,narendra,dhrumil,mark, ,,,, ,");
String clean = m.replaceFirst("");

你可以在这里看到此示例运行

编辑
如果你想要一个包含单个条目的数组,string.split是正确的方法(参见user949300的回答


如果问题仅出现在字符串末尾,那么这是一个很好的解决方案。 如果您还想删除中间的空内容,例如 blah、foo、,,bar,则正则表达式会变得更加复杂。 - user949300
同意…从一个单一的例子中泛化很难,我假设问题只会出现在字符串的末尾,而Andreas Lindgren则假设总是会有一对冒犯逗号。 - João Portela
是的,空格和逗号可能也在中间。所以这个问题可以通过Sunil Kumar的答案解决。 - Kushal Shah

1
yourString=yourString.replaceAll("^\\W+|\\W+$","");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接