我的程序停止打印到控制台,但继续在后台运行.没有例外



我的程序运行并打印前几个system.out语句,然后停止打印它们。没有例外,该程序继续运行直到手动终止为止。

我已经尝试了System.out.flush();,但不确定要放在哪里

import java.io.*;
import java.util.ArrayList;
import java.util.stream.Stream;
public class Main { 
    public static void main(String[] args) throws 
FileNotFoundException {
        String inputFileStr = args[0];//"input.txt"; 
        String outputFileStr = args[1];//"output.txt";
        String deleteFileStr = args[2];//"CS401Project5Delete_Varner_Sav58.txt";// 
        String replaceFileStr = args[3]; //"CS401Project5Replace_VARNER_SAV58.txt";
        // create files w/ corresponding file names
        try{
        File inputFile = new File(inputFileStr);
        File outputFile = new File(outputFileStr);
        File deleteFile = new File(deleteFileStr);
        File replaceFile = new File(replaceFileStr);
        // create arrayLists
        ArrayList<StringBuilder> deleteArray;
        ArrayList<StringBuilder> replaceArray;
        ArrayList<StringBuilder> inputArray;
        ArrayList<String> inputStringArray = new ArrayList<>();
        ArrayList<String> tokensArray = new ArrayList<>();
        ArrayList<Integer> frequenciesArray = new ArrayList<>();
        // turn Files into arrayLists of StringBuilders
        deleteArray = fileToArray(deleteFile);
        replaceArray = fileToArray(replaceFile);
        inputArray = fileToArray(inputFile);
        System.out.println("# words in original file: " + wordCount(inputArray));
        // create a deleteList object
        DeleteList delete = new DeleteList();
        delete.compareArray(inputArray, deleteArray);
        System.out.println("Word Count After Deleteing noise: " + delete.wordCount(inputArray));
        System.out.flush();
        // create a replacelist object
        ReplaceList replace = new ReplaceList();
        replace.compareArray(inputArray, replaceArray);
        System.out.println("Word count after replacing words: " + replace.wordCount(inputArray));
        System.out.println("New input printed to 'output.txt'");
            }
        catch (FileNotFoundException e){
        System.out.println("File not found");
    }
    }
    // turns a file into an arraylist of string builders
    public static ArrayList<StringBuilder> fileToArray(File fileName) throws FileNotFoundException {
        ArrayList<String> array = new ArrayList<>();
        ArrayList<StringBuilder> sbArray = new ArrayList<>();
        try (BufferedReader br = new BufferedReader(new FileReader(fileName))) {
            String line;
            while ((line = br.readLine()) != null) 
 {
                if (!line.isEmpty()) {
Stream.of(line.split("\s+")).forEachOrdered(word -> array.add(word));
                }
            }
        } catch (Exception e) {
            System.out.printf("Caught Exception: %s%n", e.getMessage());
            e.printStackTrace();
        }
        for(int i = 0; i < array.size(); i++) {
            StringBuilder sb = new StringBuilder();
            sb.append(array.get(i));
            sbArray.add(sb);
        }
        for(int i = 0; i < sbArray.size(); i ++) {
            if 
(sbArray.get(i).toString().endsWith(",") || 
sbArray.get(i).toString().endsWith(".") || 
sbArray.get(i).toString().endsWith(" ") 
||sbArray.get(i).toString().endsWith(":")) {
sbArray.get(i).deleteCharAt(array.get(i).length() - 1);
            }
        }
        return sbArray;
    }
    public static int wordCount(ArrayList<StringBuilder> array) {
        int count = 0;
        for (int i = 0; i < array.size(); i++) {
            count++;
        }
        return count;
    }
}



import java.util.ArrayList;
public class DeleteList extends ArrayList<Object> implements MyInterface {
/**
 * 
 */
private static final long serialVersionUID = 1L;
//constructor
@Override
public ArrayList<StringBuilder> 
compareArray(ArrayList<StringBuilder> inputArray, ArrayList<StringBuilder> deleteArray) {
    for (int i = 0; i < deleteArray.size(); i++) {
        for (int j = 0; j < inputArray.size(); j++) {
            if (deleteArray.get(i).toString().equals(inputArray.get(j).toString())){
                inputArray.remove(j);
            }
        }
    }
    return inputArray;
}
@Override
public int wordCount(ArrayList<StringBuilder> inputArray) {
    int count = 0;
    for (int i = 0; i < inputArray.size(); i++) {
        count++;
    }
    return count;
}
}
 import java.util.ArrayList;


 public class ReplaceList extends ArrayList<Object> implements MyInterface {
/**
 * 
 */
private static final long serialVersionUID = 1L;
@Override
public ArrayList<StringBuilder> 
compareArray(ArrayList<StringBuilder> inputArray, ArrayList<StringBuilder> replaceArray) {
    String wordToReplace, wordReplacingWith = null;
    for (int i = 0; i < replaceArray.size(); i++) {
        wordToReplace = replaceArray.get(i).toString();
        wordReplacingWith = replaceArray.get(i +1).toString();
        for (int j = 0; j < inputArray.size(); j++) {
            if (inputArray.get(j).toString().equalsIgnoreCase((wordToReplace))) {
                StringBuilder strB = new StringBuilder();
                strB.append(wordReplacingWith);
                inputArray.set(j, strB);
            }
        }
    }
    return inputArray;
}
@Override
public int wordCount(ArrayList<StringBuilder> inputArray) {
    int count = 0;
    for (int i = 0; i < inputArray.size(); i++) {
        count++;
    }
    return count;
}
}

它应该打印到控制台:

  • 原始文件中的单词:
  • 删除噪声后的单词:
  • 替换单词后的单词:
  • 新输入打印到" output.txt"&lt; ---(我尚未编码此部分(

    注意:我必须使用字符串构建器,实现接口,并具有Deltelist和替代主义者扩展了ArrayList&amp;处理所有例外主

你有问题的是:

替代者#comparearray

while (i < replaceArray.size()) {
    wordReplacingWith = replaceArray.get(i + 1).toString();
}

您可能想在某个时候增加i或更可能需要其他计数器。
和那些阻止汇编的System.exit()命令;(


我在更新版本中唯一看到的是

的潜在ArrayIndexOutOfBoundsException
   for (int i = 0; i < replaceArray.size(); i++) {
      ...
      wordReplacingWith = replaceArray.get(i +1).toString();
      ...
   }

与您可能仍然存在的任何无尽环路问题无关:

DeleteList#compareArray可能会在删除操作后跳过元素,由于您的循环不涵盖位置J(前J 1(元素的新元素。

最新更新