【发布时间】:2018-10-17 18:14:02
【问题描述】:
我正在尝试在字符串中切换$,并将字符放在其右侧。我不允许使用char[],所以我决定使用StringBuffer。但是,当我尝试使用 H$E 之类的代码运行代码时,它会输出 HE$H$E 我不知道多余的字符是从哪里来的,我正在寻求解释。
package schrumpf.clayton.csc110.drills1;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class MoneyToTheRight {
static BufferedReader in;
public static void main(String[] args) throws IOException{
in = new BufferedReader(new InputStreamReader(System.in));
String input = in.readLine();
int dollarIndex = input.indexOf("$");
StringBuffer buffer = new StringBuffer(input);
char afterDollarChar = buffer.append(input).charAt((dollarIndex + 1));
buffer.setCharAt(dollarIndex, afterDollarChar);
buffer.setCharAt((dollarIndex + 1),'$');
String result = buffer.toString();
System.out.println(result);
}
}
【问题讨论】:
-
所以如果你输入“H$E”你会希望输出是“HE$”?
-
提示:你正在调用
buffer.append(input),即使你已经用input创建了StringBuffer。这就是input的内容出现两次的原因。 -
请不要使用StringBuffer,因为它在十多年前就被StringBuilder取代了。
-
@NicholasK:以使用其线程安全的方式使用
StringBuffer是非常罕见的。 (而且这段代码当然不会。)即使您确实想要线程安全,它通常也不是基于“每次调用同步”。 -
@NicholasK 以线程安全的方式使用 StringBuffer 比它最初看起来更难,充其量也容易出错。 SimpleDateFormat 不是线程安全的,即使它是由 JDK 开发人员编写并使用 StringBuffer。
标签: java stringbuffer