StringBuffer没有输出我所期望的

时间:2018-10-17 18:14:02

标签: java stringbuffer

我正在尝试在字符右边的字符串中切换$。我不允许使用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);
    }

}

1 个答案:

答案 0 :(得分:2)

您要添加两次输入。

StringBuffer buffer =  new StringBuffer(input);
buffer.append(input)

我建议添加一次。我还建议使用StringBuilder,它在十多年前就取代了StringBuffer。

Scanner in = new Scanner(System.in);

StringBuilder buffer =  new StringBuilder(in.nextLine());
int dollarIndex = buffer.indexOf("$");
buffer.setCharAt(dollarIndex, buffer.charAt(dollarIndex + 1));
buffer.setCharAt(dollarIndex + 1, '$');
System.out.println(buffer);

或单线

System.out.println(in.nextLine().replaceFirst("\\$(.)", "$1\\$"));