Java:混乱的单词程序

时间:2017-10-02 02:06:13

标签: java

我的程序加载两个文本文件:一个带有英文单词列表,另一个带有混乱的单词(更多只是随机字符串,但大多数是单词),然后确定哪些单词可以由混乱的单词和打印(至少假设to)旁边有混乱版本的单词。我的程序有效地找到了混乱的单词可以组成的单词。问题不是所有与混杂的等价物打印混乱的单词旁边的单词。另外,我需要在右侧解读右边的混乱词语。这里的示例是一些输出(逗号分隔行,即如果逗号中的两个单词彼此相邻打印; addej, ahicryrhe层次结构, 阿尔文海军, annaab banana, baltoc, 布拉尼附近,

   public class Lab4{

    public static void main(String [] args) throws Exception{
        if(args.length<2) {
            Error(); }
        BufferedReader jumbledW = new BufferedReader(new FileReader(args[1]));
        BufferedReader words = new BufferedReader(new FileReader(args[0]));
        List<String> jumbledWList = new ArrayList<>();
        List<String> wList = new ArrayList<>();

        long initialTime = System.currentTimeMillis();

        while(jumbledW.ready()){
            String jumble = jumbledW.readLine();
            jumbledWList.add(jumble);
        }

        Collections.sort(jumbledWList);
        while (words.ready()){
            String word = words.readLine();
            wList.add(word);
        }
        Collections.sort(wList);
        for (String jumble : jumbledWList ) {
            System.out.print(jumble + " ");
            for (String word : wList) {
                if(toConnical(jumble).equals(toConnical(word)))
                    System.out.print(word);


        }
        System.out.println();   
        }
        long finalTime = System.currentTimeMillis();
        long time = finalTime - initialTime;
        System.out.println("The time taken for this program to run is " + time/1000.0 + " seconds" );

        }

    private static void Error(){
        System.out.println("\nError:You have to pass the name of the input files on the command line" );
        System.exit(0);
        }   

    private static String toConnical(String word){
        char [] arr = word.toCharArray();
        Arrays.sort(arr);
        String connical = new String(arr);
        return connical;
    }
}

1 个答案:

答案 0 :(得分:0)

在浏览旧的未答复的帖子时,我遇到了这个特别的问题,坦率地说,实际问题可能有些不清楚。我读这篇文章的方式是:

  1. 文件名通过命令行传递给该应用程序,该命令行由几个混乱的字符字组成。然而,不确定文件中的每一行是否由单个混乱的单词组成 OR 文件中的每一行由多个混乱的单词组成,这些单词用一个或多个空格(或者甚至是标签)分隔。考虑到这一点,我们需要涵盖这两种情况。

  2. 还通过命令行将另一个文件名传递给此应用程序,该命令行由多个 有效语言类型 字组成。此文件被视为 Word列表,而任何单个混乱的单词可能与列表中的一个( 或更多 )相关如果它是未被解扰的(混乱的字符串列表中的单词可能不会混乱)。

  3. 混乱字符串列表被处理时,每个单词列表单词被发现能够通过排序字符匹配到与排序混杂单词的字符比较字符被打印到控制台窗口。

  4. 所需的控制台输出是一个逗号分隔的字符串,由每个混乱的单词组成,后跟空格分隔的单词列表中的单词:

    addej jaded,ahicryrhe层次结构,alvan alvan naval,annaab banana,......等

    然而,这似乎与您的评论相矛盾:

      

    “程序会给你一个包含大量英文单词的txt文件   在字典和另一个txt文件中找到混乱的单词,如   可以制造汽车或的cra。我想要的输出是   参考cra的例子就是“car cra”(在一行上)。“

    尽管空格分隔的单词列表单词首先出现,然后处理混乱的单词,每个单词消耗一个控制台窗口行。需要哪种格式?顺便说一句 rat 无法通过 cra 来实现。

  5. 实际上,您的代码按预期工作,但是由于您使用的是 BufferedReader 对象和 FileReader 对象,因此您的代码需要位于 try / catch中阻止处理任何异常,例如 FileNotFoundException IOException 。这是一项要求,不能排除。

    以下是您的代码稍作修改,以适应您的第一个所需的输出格式:

    try {
        BufferedReader jumbledW = new BufferedReader(new FileReader(args[1]));
        BufferedReader words = new BufferedReader(new FileReader(args[0]));
        List<String> jumbledWList = new ArrayList<>();
        List<String> wList = new ArrayList<>();
    
        long initialTime = System.currentTimeMillis();
    
        while (jumbledW.ready()) {
            String jumble = jumbledW.readLine();
            jumbledWList.add(jumble);
        }
    
        Collections.sort(jumbledWList);
        while (words.ready()) {
            String word = words.readLine();
            wList.add(word);
        }
        Collections.sort(wList);
    
        String resultString = "";
        for (int i = 0; i < jumbledWList.size(); i++){
            String jumble = jumbledWList.get(i);
            resultString+= jumble + ":";
            for (String word : wList) {
                if (toConnical(jumble).equals(toConnical(word))) {
                    resultString+= " " + word;
                }
            }
            if (i != (jumbledWList.size()-1)) { resultString+= ", "; }
        }
        System.out.println(resultString);
    
        long finalTime = System.currentTimeMillis();
        long time = finalTime - initialTime;
        System.out.println("The time taken for this program to run is " + time / 1000.0 + " seconds");
    } 
    catch (FileNotFoundException ex) { ex.printStackTrace(); } 
    catch (IOException ex) { ex.printStackTrace(); }
    

    混乱的单词列表文件包含以下混乱的字符串:

    addej
    ahicryrhe
    alvan
    annaab
    baltoc
    braney
    cra
    htis
    

    在我的370,101字Word列表文件中运行上面混乱的单词列表之后,控制台输出看起来像这样。在我的系统上处理需要0.740秒:

    addej: jaded, ahicryrhe: hierarchy, alvan: alvan naval, annaab: banana, baltoc: cobalt, braney: barney nearby, cra: arc car, htis: hist hits isth shit sith this tshi
    

    上面显示的所有单词都在我的Word列表文件中。