StringBuffer не выводит то, что я ожидал - PullRequest
0 голосов
/ 17 октября 2018

Я пытаюсь переключить $ в строке с символом справа.Мне не разрешено использовать 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 голосов
/ 17 октября 2018

Вы добавляете ввод дважды.

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\\$"));
...