Замена строчки в текстиле с оставлением остатков oldLine - PullRequest
0 голосов
/ 05 мая 2020

У меня есть текстовый файл inventory.txt с

cats, 10, 15
dogs, 10, 15

Я хочу запустить код, в котором я могу ввести cats как replacee и turtles, 5, 5 как replacer, давая me,

turtles, 5, 5
dogs, 10, 15

однако, когда я это сделаю, все, что находится после первой запятой, остается в дополнение к моему replacer. Я могу заменить cats на ПРОСТО turtles без 5, 5, что дает мне

turtles, 10, 15
dogs, 10, 15

, но когда я пытаюсь добавить 5, 5 после первой запятой, выведите ниже.

Код

public void modifyItems() throws IOException {

        File file = new File("src/inventory.txt");
        String line = "";
        String oldLine = "";
        String replacee;
        String replacer;

        BufferedReader reader = new BufferedReader(new FileReader(file));

        while ((line = reader.readLine()) != null) {
            oldLine += line + System.lineSeparator();

        }
        System.out.println(oldLine);
        reader.close();

        System.out.println("enter the item you want to edit");
        replacee = scan.next();
        scan.nextLine();
        System.out.println("enter the updated information");
        replacer = scan.nextLine();
        String newLine = oldLine.replaceAll(replacee, replacer);

        BufferedWriter writer = new BufferedWriter(new FileWriter(file));
        writer.write(newLine);
        writer.flush();
        writer.close();
    }

Вывод

cats, 10, 15
dogs, 10, 15

enter the item you want to edit
cats
enter the updated information
turtles, 5, 5

Вывод текстового файла

turtles, 5, 5, 10, 15
dogs, 10, 15

1 Ответ

0 голосов
/ 05 мая 2020

Метод String replaceAll делает то, что вы видели в своем коде. Он заменяет вводимый вами текст на введенную вами инвентарную строку.

Метод, который вы хотите использовать, - это String startsWith метод.

Вам необходимо сохранить массив строк прочитанным , чтобы вы могли найти правильную строку для замены.

public void modifyItems() throws IOException {

    File file = new File("src/inventory.txt");

    // Replace 100 with a large enough number to hold
    // the whole file.
    String[] oldLine = new String[100];

    BufferedReader reader = new BufferedReader(
            new FileReader(file));
    int count = 0;
    String line = "";
    while ((line = reader.readLine()) != null) {
        oldLine[count] = line + System.lineSeparator();
        System.out.println(line);
        count++;
    }
    reader.close();

    System.out.println("enter the item you want to edit");
    String replacee = scan.nextLine();
    System.out.println("enter the updated information");
    String replacer = scan.nextLine();

    BufferedWriter writer = new BufferedWriter(
            new FileWriter(file));
    for (int i = 0; i < count; i++) {
        if (oldLine[i].startsWith(replacee)) {
            writer.write(replacer);
        } else {
            writer.write(oldLine[i]);
        }
    }
    writer.flush();
    writer.close();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...