将空格替换为连字符

20

我正在尝试将字符串中的空格替换为连字符。

String replaceText = "AT AT";
replaceText.replace(' ', '-');

但是当我这样做时,似乎无法替换字符。我尝试了replaceAll()方法,它也不起作用。

++++++答案+++++++

抱歉,这是我的错误...夜间编程的结果:(

谢谢你的回答,可能我不能回答所有问题,所以我会检查第一个答案。

replaceText = replaceText.replace(' ', '-');

1
我认为下面众多的答案都强调了字符串是不可变的。 :) - Brent Worden
1
@Brent:嗯,也许我需要让我的回答更加突出:使用更大、更粗的字体! - Matt Ball
还有6分钟来检查答案.. 真讨厌 :( - ben
2
睡眠不足是愚蠢编程错误(SPI)的第二大来源。你问第一大来源是什么?该死的星期一。 - Matt Ball
哈哈,好吧,最后期限,最后期限,最后期限 :( - ben
嘿,@Matt,我把那句话分享为我的个人签名 :) - ben
7个回答

40
replaceText = replaceText.replace(' ', '-');

字符串是不可变的对象,即创建后无法更改。所有能够修改字符串的方法都会返回一个包含了修改后内容的新字符串。


13

字符串是不可变的。

你需要保存replace()返回的值。如果你想要替换多个出现,使用replaceAll()

String replaceText = "AT AT";
replaceText = replaceText.replaceAll(" ", "-");

正如@Mark Peters在评论中指出的那样,replace(Char, Char)足以替换所有出现的字符,并且速度更快。

String replaceText = "AT AT";
replaceText = replaceText.replace(' ', '-');

如果这个事实让你烦恼:不可变性是一件好事。


@Rob,嗯......我不知道......可能不是吧? - Matt Ball
4
也许它们并不是......但那个大胆的信息让我感到好奇。 - Cristian
replace(char, char) 方法替换所有出现的字符,与其重载版本replace(CharSequence, CharSequence)一样。如果使用replaceAll方法加入正则表达式,则退步了,因为现在需要考虑转义特殊字符,并且性能会更差。 - Mark Peters

6

replacereplaceAll方法返回一个替换后的字符串。你是使用返回值,还是期望replaceText字符串发生改变?如果是后者,你将看不到任何改变,因为字符串是不可变的

String replaceText = "AT AT";
String replaced = replaceText.replace(' ', '-');

// replaced will be "AT-AT", but replaceText will NOT change

5
替换方法返回一个字符串,所以你需要重新赋值你的字符串变量,例如:
String replaceText = "AT AT";                         
replaceText = replaceText.replace(' ', '-'); 

5

字符串是不可变的。您需要使用replace的返回值:

replaceText = replaceText.replace(' ', '-');

2
/*You can use below method pass your String parameter and get result as   String  spaces replaced with hyphen*/
  private static String replaceSpaceWithHypn(String str) {
    if (str != null && str.trim().length() > 0) {
        str = str.toLowerCase();
        String patternStr = "\\s+";
        String replaceStr = "-";
        Pattern pattern = Pattern.compile(patternStr);
        Matcher matcher = pattern.matcher(str);
        str = matcher.replaceAll(replaceStr);
        patternStr = "\\s";
        replaceStr = "-";
        pattern = Pattern.compile(patternStr);
        matcher = pattern.matcher(str);
        str = matcher.replaceAll(replaceStr);
    }
    return str;
}

0
如果您要替换多个字符串,建议考虑使用 StringBuilder 以提高性能。
String replaceText = "AT AT";
StringBuilder sb = new StringBuilder(replaceText);
sb.Replace(' ', '-');

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