在StringBuilder中替换字符

21

我有一个StringBuilder,想要使用replace方法替换其中的一个字符。下面是给出的代码:

StringBuilder sb = new StringBuilder();
sb.append("01-02-2013");

我该如何将“-”替换为“/”?


你可以简单地使用 toString().replace("-", "/") - MadProgrammer
https://dev59.com/A3A75IYBdhLWcg3wGlEa - Habib
请查看此方法:http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html#setCharAt(int, char) - Nandkumar Tekale
答案实际上就在问题中,很难想象你有任何思考、研究或尝试过什么。 - Peter Lawrey
4个回答

33
如果您不想将 StringBuilder 转换为 String 或者需要保留并继续使用它,那么您可以这样做...
for (int index = 0; index < sb.length(); index++) {
    if (sb.charAt(index) == '-') {
        sb.setCharAt(index, '/');
    }
}
如果你不介意的话,你可以做这样的事情...
String value = sb.toString().replace("-", "/");

1
请注意replace(CharSequence, CharSequence)和String.replace(char, char)之间的区别,第二种形式当然更快,因为它是直接替换而不是模式替换——如果您查看每种形式的源代码,您就会明白我在说什么。 - Guido Medina
@Guido Medina,这不仅仅是一个替换。它将所有字符串重写为一个新数组。可能是为了维持“不可变性”。我希望StringBuilder可以直接做到这一点,但看起来情况甚至更糟。 “将其转换为字符串”听起来很困惑,“字符串缓冲区类似于字符串,但可以修改。”或者“使用StringBuilder.append而不是String.+以提高性能”。 - user9999

7

试试这种方式

StringBuilder sb = new StringBuilder();
            sb.append("01-02-2013");

            sb.replace(sb.indexOf("-"), sb.indexOf("-")+1, "/") ;
            sb.replace(sb.indexOf("-"), sb.indexOf("-")+1, "/") ;
            System.out.println(sb.toString());

更好的方法是:
sb.toString().replaceAll("-", "/");

索引是硬编码的。 - Nandkumar Tekale
1
replaceAll 不是接受 regex 吗?我认为应该使用 replace 方法。 - Anirban Nag 'tintinmj'

1
你应该稍微搜索一下。
无论如何,当开始使用Java编程时,了解可以使用Java内置对象做什么的最好方法是去那个类的javadoc,然后你会了解到很多东西。
在你的情况下,你会在这里找到答案:StringBuilder javadoc 使用replace方法。

  1. 它具有完全不同的参数
  2. 不仅仅是替换字符值,而且能够改变长度,因此需要重建缓冲区
  3. 即使通过indexOf间接使用,indexOf也只接受字符串。
- user9999

0

尝试直接将字符替换为字符串本身。

sb.append(("blah-blah").replace('-', '_'));

会输出

blah_blah

StringBuilder没有replace(char, char)函数。 - sanbhat
我已经测试过了,它正常工作。sb = StringBuilder,而不是StringBuffer。 - Rogue
1
@sanbhat 是的,我也这么想,但 Rogue 是在字符附加到 StringBuilder 之前替换它们... ("blah-blah").replace('-', '_') - 有点棘手... - MadProgrammer
非常正确。如果您想要追加后缀(即整个字符串),那么使用sb.toString().replace('-', '/');的方法会更理想。不过,具体情况还是要灵活变通。 - Rogue

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