我的代码运行15分钟,但只有白色输出?

时间:2019-01-13 06:55:57

标签: java fileinputstream stop-words

我正在做一个停用词代码,用于数据清理。我在YouTube上观看了一个教程:https://www.youtube.com/watch?v=ckQUlI7x7hI他的代码可以正常工作并显示输出,但我的却没有

我使用英语停用词,例如“ a”,“ an”,“ away”,“ keeps”。输入将为“每天一个苹果远离医生”,输出应为“每天使医生远离苹果”。

这是我文件的内容: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 :(得分:1)

您的代码存在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分隔(新 行),因为您是基于此拆分而不是像 您共享的链接中的文件。

我建议您缩进代码,并使用有意义的名称来命名变量。这样的调试问题会简单得多。