Удаление пробелов в текстовом файле - PullRequest
0 голосов
/ 15 октября 2018

Мне пришлось написать простой код, который считает слова в текстовом файле.Тогда кто-то сказал мне, что это неполно, потому что, когда, например, в строке будет 2 или более пробелов, функция будет считать их как слова, и результат будет неверным.Поэтому я попытался исправить это, составив список и удалив все "" элементы там, но, похоже, это не сработало.Можете ли вы предложить, что можно сделать?

Вот код, как сейчас:

    int count = 0;
    File file = new File("C:\\Users\\user\\Desktop\\Test.txt");
    FileInputStream fis = new FileInputStream(file);
    byte[] bytesArray = new byte[(int) file.length()];
    fis.read(bytesArray);
    String s = new String(bytesArray);
    String[] data = s.split(" ");
    List<String> list = new ArrayList<>(Arrays.asList(data));
    list.remove(" ");
    data = list.toArray(new String[0]);
    for (int i = 0; i < data.length; i++) {
        count++;
    }
    System.out.println("Number of words in the file are " + count);

Ответы [ 4 ]

0 голосов
/ 15 октября 2018

Будь ботаником.Вы можете сделать это всего за одну строку, используя классы в java.nio.file package:)

int count = new String(Files.readAllBytes(Paths.get("/tmp/test.txt")), "UTF-8")
           .trim().split("\\s+").length;

, чтобы подсчитать, сколько слов в файле.Или

String result = new String(Files.readAllBytes(Paths.get("/tmp/test.txt")), "UTF-8")
           .trim().replaceAll("\\s+", " ");

для правильной замены одной строки с содержимым.

0 голосов
/ 15 октября 2018

Этого можно добиться с помощью регулярных выражений

String [] data = s.split ("\ s +");

        int count = 0;
        File file = new File("/home/vahid/Documents/test.txt");
        FileInputStream fis = new FileInputStream(file);
        byte[] bytesArray = new byte[(int) file.length()];
        fis.read(bytesArray);
        String s = new String(bytesArray);
        String[] data = s.split("\\s+");
        List<String> list = new ArrayList<>(Arrays.asList(data));
        list.remove(" ");
        data = list.toArray(new String[0]);
        for (int i = 0; i < data.length; i++) {
            count++;
        }
        System.out.println("Number of words in the file are " + count);
0 голосов
/ 15 октября 2018

Лучший способ справиться с такого рода требованиями: сначала мы должны знать кодировку символов, которая использовалась в текстовом файле.исходя из этого, мы должны попытаться прочитать файл побайтово и одновременно выполнить обработку Ex: если файл равен utf-8, когда вы читаете первый байт, мы можем определить, сколько еще байтов нужно прочитать, чтобы получитьпервый характер. Так, когда мы нашли "."или "" или разрыв строки, тогда мы можем определить его как разделитель слов.

Этот способ эффективен (особенно для больших файлов), и всегда имеет значение кодировка файла.

если мы вызываем конструктор String с байтом [], он всегда использует кодировку по умолчанию и также перебирает массив байтов за байтом.

0 голосов
/ 15 октября 2018

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

String data1 = s.trim().replaceAll(" +", " ");

перед строкой:

String[] data = data1.split(" ");

Это должно удалить любое вхождение 2 или более последовательных пробелов в строке s.Нет необходимости использовать list.remove(" ")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...