мой код работает в течение 15 минут, но только белый вывод? - PullRequest
0 голосов
/ 13 января 2019

Я делаю код стоп-слова для очистки данных. Я следовал учебному пособию на YouTube: https://www.youtube.com/watch?v=ckQUlI7x7hI его код работает и показывает вывод, а мой нет

Я использую английские стоп-слова, примеры моих стоп-слов: "a", "an", "away", "keep". ввод будет «Яблоко в день держит доктора подальше», вывод должен быть «Яблоко в день доктор».

это содержимое моего файла: https://ufile.io/gikev

Вот код:

import java.io.FileInputStream;
import java.util.ArrayList;

public class DataCleaning {


public static void main(String[] args) {

    ArrayList sw = new ArrayList<>();

    try{
        FileInputStream x = new FileInputStream("/Users/Dan/Desktop/DATA/stopwords.txt");

        byte b[] = new byte[x.available()];
        x.read(b);
            x.close();

            String data[] = new String(b).split("\n");

        for(int i = 0; i < data.length; i++)
        {
            sw.add(data[i].trim());
        }
         FileInputStream xx = new FileInputStream("/Users/Dan/Desktop/DATA/cleandata.txt");

        byte bb[] = new byte[xx.available()];
        xx.read(bb);
            xx.close();

            String dataa[] = new String(bb).split("\n");



            for(int i = 0; i < dataa.length; i++)

        {
            String file = "";
            String s[] = dataa[i].split("\\s");
            for(int j = 0; j < s.length; i++)
            {
                if(sw.contains(s[j].trim().toLowerCase()))
                {
                    file=file + s[j] + " ";
                }

            }
            System.out.println(file + "\n");
        }

    } catch(Exception a){
        a.printStackTrace();
    }

   }

 }

и когда я запускаю мой, он делает только это:

что мне делать?

1 Ответ

0 голосов
/ 13 января 2019

Есть 3 проблемы с вашим кодом:

  1. Вы увеличиваете неправильную переменную в самом внутреннем цикле, таким образом
    в результате бесконечный цикл как j всегда будет меньше, чем
    s.length и вы никогда не увеличиваете j. Измените эту строку:

    for (int j = 0; j < s.length; i++) {
    

    до

    for (int j = 0; j < s.length; j++) {
    
  2. Чтобы напечатать слова, которые не являются стоп-словами , вам необходимо отрицать if условие следующее:

    if (!sw.contains(s[j].trim().toLowerCase()))
    
  3. Также убедитесь, что файл stopwords.txt отделен от \n (новый линия), потому что вы разделяете его на основе этого, а не как файл в ссылке, которой вы поделились.

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

...