Мне нужно разделить содержимое файла .txt на новую строку, когда он видит обратную косую черту - PullRequest
0 голосов
/ 29 мая 2020

У меня есть файл .txt с именем «new.txt» и его содержимое:

nxy15\nxy995\nxy823\nxy721\nxy1\nxy1872\nxy3482\nxy878\nxy123\nxy8753\nxy1284\nxy4495\nxy4323\nxy812\nxy7123\nxy1273

Мне нужно отформатировать этот файл .txt, чтобы быть более точным c Мне нужно go к следующей строке, когда backsla sh определяется как одно число для каждой строки, и мне нужно также удалить буквы.

Форматированный файл .txt должен выглядеть так:

15
995
823
721
1
1872
...

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

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class ReadingFile{
    public static void main(String[] args) {
        try {
            File file = new File("C:\\new.txt");
            Scanner read = new Scanner(file);
            while (read.hasNextLine()) {
                String obj2 = read.nextLine();
                System.out.println(obj2);
            }
            read.close();
        } catch (FileNotFoundException e) {
            System.out.println("An error occurred.");
            e.printStackTrace();
        }
    }
}

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

Любая помощь или подсказки приветствуются, спасибо.

Ответы [ 5 ]

1 голос
/ 29 мая 2020

Попробуйте так:

String s = "nxy15\nxy995\nxy823\nxy721\nxy1\nxy1872\nxy3482\nxy878\nxy123\nxy8753\nxy1284\nxy4495\nxy4323\nxy812\nxy7123\nxy1273";
String[]s1 = s.split("[\\\\]+");
for(String s2:s1) {
    System.out.println(s2.replaceAll("[A-Za-z]", ""));
}

Вы получите:

15
995
823
721
1
1872
3482
878
123
8753
1284
4495
4323
812
7123
1273
1 голос
/ 29 мая 2020

Просто поместите это в свою строку:

String obj2 = read.nextLine().replace("\\", "\n"); 

Он будет печатать новую строку каждый раз, когда найдет \

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

Вот как бы я это сделал:

public class ReadingFile{
    public static void main(String[] args) {
        File in = new File("C:\\old.txt");
        File out = new File("C:\\new.txt");
        ArrayList<String> al = new ArrayList<>();

        try (Scanner read = new Scanner(in);
                FileWriter write = new FileWriter(out)) { //ALWAYS use try-with-resources if you can
            while (read.hasNextLine()) {
                al.add(read.nextLine()); //reads to an ArrayList (so there could be multiple lines in the input file)
            }

            for (String str : al) {
                write.write(str.replace("\\", "\n")); //replace all backslashes with newlines
                write.write('\n');
            }

            write.flush(); //flush the Writer at the end, so everything gets written to the file
        } catch (FileNotFoundException e) {
            throw new RuntimeException("File not found."); //Don't swallow exceptions, at least throw a RuntimeException
        } catch (IOException ex) {
            throw new RuntimeException("IO exception occured"); //Don't swallow exceptions, at least throw a RuntimeException
        }
    }
}
0 голосов
/ 29 мая 2020

Функциональный способ сделать это (начиная с Java 8) будет выглядеть примерно так:

Files.lines(Paths.get("C:\\new.txt"))
                .flatMap(s -> Arrays.stream(s.split("\\\\")))
                .map(s -> s.substring(3))
                .forEach(System.out::println);

Если вы хотите перенести результаты в другой файл, вы можете отбросить forEach и скормить поток в Files.write:

Files.write(Paths.get("C:\\formatted.txt"),
            Files.lines(Paths.get("C:\\new.txt"))
                .flatMap(s -> Arrays.stream(s.split("\\\\")))
                .map(s -> s.substring(3)).collect(Collectors.toList()));

Обратите внимание, что здесь не рассматриваются возможные ошибки ввода (например, другой формат в строке nxy123), но это не должно быть сложно добавить.

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

Вы должны попробовать прочитать исходный текстовый файл, разделив его вокруг «/», а затем распечатать каждую строку результирующего массива.

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class ReadingFile{
    public static void main(String[] args) {
        FileWriter myWriter = new FileWriter("filename.txt");
        try {
            File file = new File("C:\\new.txt");
            Scanner read = new Scanner(file);
            while (read.hasNext()) {
                String obj2 = read.next();
                String[] arr = obj2.split("\");
                for(String s : arr) {
                    myWriter.write(s);
            }
            read.close();
        } catch (FileNotFoundException e) {
            System.out.println("An error occurred.");
            e.printStackTrace();
        }
        myWriter.close()
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...