计算最长英语单词链课堂测试

import com.sun.deploy.nativesandbox.NativeSandboxOutputStream;

import java.io.*;
import java.util.*;




public class Letteron {

    public static void main(String[] args)throws FileNotFoundException, IOException  {
        // TODO 自动生成的方法存根


        File file=new File("C://xunlei//test//input1.txt");
        File file2=new File("C://xunlei//test//output.txt");

        if(!file.exists())
        {
            System.out.println("文件不存在!");
        }
        else if(file.exists() && file.length() == 0) {
            System.out.println("文件为空!");
        } //判断是否文件为空
        else
        {
            System.out.println("文件存在");
            BufferedReader br=new BufferedReader(new FileReader(file));
            BufferedWriter bw = new BufferedWriter(new FileWriter("C://xunlei//test//output.txt")) ;


            String s;
            int i,j;
            ArrayList<ArrayList<String>> listall=new ArrayList();
            String key;
            s=br.readLine();
            //将文本文件中的所有信息变为字符串
            String []s1=s.split(" ");//以空格为分割划分每个单词
            if(s1.length==1)
                System.out.println("单词数为1");
            else
            {

                for(i=0;i<s1.length;i++)
                {

                }//测试录入

                for(j=0;j<s1.length;j++)
                {
                    ArrayList<String> list=new ArrayList<String>();
                    key=s1[j].substring(s1[j].length()-1);
                    list.add(s1[j]);

                    for(i=1;i<s1.length;i++)
                    {

                        if(key.equals(s1[i].substring(0, 1)))
                        {
                            list.add(s1[i]);
                            key=s1[i].substring(s1[i].length()-1);
                        }
                        else
                            continue;
                    }
                    listall.add(list);
                }
                int max=0;
                int count=0;

                for(i=0;i<listall.size();i++)
                {
                    if(max<listall.get(i).size())
                    {
                        max=listall.get(i).size();
                        count=i;
                    }
                }

                System.out.println("最长单词串为:");
                for(i=0;i<listall.get(count).size();i++)
                {
                    System.out.println(listall.get(count).get(i));
                    bw.write(listall.get(count).get(i));
                    bw.write(" ");
                }
                br.close();
                bw.close();

            }
        }
    }

}

 

从一段英语文本中将每个单词分离出来,并且找到最长英语单词链。具体问题如下:大家经常玩成语接龙游戏,我们试一试英语的接龙吧:一个文本文件中有N 个不同的英语单词, 我们能否写一个程序,快速找出最长的能首尾相连的英语单词链,每个单词最多只能用一次。最长的定义是:最多单词数量,和单词中字母的数量无关。统一输入文件名称:input1.txt, input2.txt统一输出文件名称:output1.txt,output2.txt程序需要考虑下列异常状况:例如,文件不存在,你的程序会崩溃么,还是能优雅地退出并给用户提示信息?如果文件没有任何单词、只有一个单词、没有可以首尾相连的单词,程序应该如何输出?如果输入文件有一万个单词,你的程序能多快输出结果?

我们首先要导入文件

File file=new File("C://xunlei//test//input1.txt");
File file2=new File("C://xunlei//test//output.txt");
FileInputStream fis = new FileInputStream(file);
InputStreamReader isr = new InputStreamReader(fis,"UTF-8");

我们可以将文本文件中的文字取出来,用java语句把它存成长字符串,然后再用split方法以特殊字符例如空格,逗号为间隔将长字符串分割成单词,存在字符串数组中。之后的操作就需要取字符串的头和尾,我通过百度找到了方法。 s1[j].substring(s1[j].length()-1);这个substring方法是取字符串尾,s1[i].substring(0, 1)是取字符串头,通过这些我们可以进行单词字母匹配。设置一个list容器,从第一个单词开始,把它加入容器中,以它的尾字母作为key值,依次循环比较,找到首字母等于key的单词,将它存入容器,并将key值更新为它的尾部。在这层之外再套一层循环,考虑到每个单词都作为第一个单词的情况,再将每次循环所得到的容器加入到一个新的容器中,容器中套容器。最后比较容量最大的容器就是最长的单词链。

posted @ 2023-02-27 17:25  橘子味芬达水  阅读(17)  评论(0编辑  收藏  举报