课堂练习01题目:计算最长英语单词链总结

 、题目内容:

大家经常玩成语接龙游戏,我们试一试英语的接龙吧:一个文本文件中有N 个不同的英语单词, 我们能否写一个程序,快速找出最长的能首尾相连的英语单词链,每个单词最多只能用一次。

最长的定义是:最多单词数量,和单词中字母的数量无关。

、题目要求:

1、统一输入文件名称:input1.txt, input2.txt

2、统一输出文件名称:output1.txt,output2.txt

3、程序需要考虑下列异常状况:

(1)例如,文件不存在,你的程序会崩溃么,还是能优雅地退出并给用户提示信息?

(2)如果文件没有任何单词、只有一个单词、没有可以首尾相连的单词,程序应该如何输出?

(3)如果输入文件有一万个单词,你的程序能多快输出结果?

 

思路设计:

1、先构思程序步骤:导入文件、提取单词、提取单词首和尾、比较结果存储、导出最长链。

2、代码实现:

先利用

1 File f1 = new File("src/input3919.txt");
2         BufferedReader br = new BufferedReader(new FileReader(f1));
3         //定义个字符串用来保存每次读取的数据
4         String len;
5         StringBuffer sb = new StringBuffer();
6         while ((len = br.readLine()) != null) {
7            // System.out.println(len);
8                 sb.append(len);//将文件内容存入sb中
9         }

提取文件中的内容

然后利用

 1  String str = sb.toString().toLowerCase();
 2  String[] strings = str.split("[^a-zA-Z\\']+");

对内容单词进行分割并统一大小写

随后利用substring函数进行首尾提取,比较并储存结果。利用.write()函数写入文件。

 

完成代码:

 1 package com.text;
 2 
 3 import org.omg.CORBA.WStringSeqHelper;
 4 
 5 import java.io.*;
 6 import java.util.ArrayList;
 7 import java.util.Objects;
 8 
 9 public class file4 {
10     public static void main(String[] args) throws Exception {
11         File file = new File("src/input3919.txt");
12         if (file.exists() && file.length() == 0) {
13             System.out.println("  文件为空!");
14             System.exit(0);
15         } else if (achieve() == 1) {
16             System.out.println("  文件只有一個單詞!");
17             System.exit(0);
18         } else {
19             achieve();
20         }
21     }
22 
23     public static long achieve() throws Exception {
24         // ArrayList<String> list = new ArrayList<String>();
25         ArrayList<String> list2 = new ArrayList<String>();//存储遍历结果
26 
27         File f1 = new File("src/input3919.txt");
28         BufferedReader br = new BufferedReader(new FileReader(f1));
29         //定义个字符串用来保存每次读取的数据
30         String len;
31         StringBuffer sb = new StringBuffer();
32         while ((len = br.readLine()) != null) {
33            // System.out.println(len);
34                 sb.append(len);//将文件内容存入sb中
35         }
36         //不区分大小写
37         String str = sb.toString().toLowerCase();
38         String[] strings = str.split("[^a-zA-Z\\']+");
39 
40         String tail, head, word;
41         long total = 1, max = 1;
42 
43         for (int i = 0; i < Objects.requireNonNull(strings).length; i++) {
44             ArrayList<String> list1 = new ArrayList<String>();//存储遍历结果
45             total = 1;
46 
47             word = strings[i];
48             list1.add(word);
49             tail = word.substring(word.length() - 1);
50 
51              //System.out.println(tail);
52 
53             for (int j = i + 1; j < Objects.requireNonNull(strings).length; j++) {
54                 word = strings[j];
55                 head = word.substring(0, 1);
56                 //System.out.println(head);
57 
58                 if (tail.equals(head)) {
59                     list1.add(word);
60                     //System.out.println(total);
61                     tail = word.substring(word.length() - 1);
62                     total++;
63                 } else {
64                    // System.out.println(total);
65                     if (total > max)
66                     {
67                         list2 = list1;
68                         max = total;
69                     }
70                     break;
71                 }
72                 if(j == Objects.requireNonNull(strings).length - 1)
73                 {
74                     if (total > max)
75                     {
76                         list2 = list1;
77                         max = total;
78                     }
79                 }
80             }
81         }
82         System.out.println(max);
83 
84         File file = new File("src/output.txt");
85         FileWriter out = new FileWriter(file);
86         for (int i = 0; i < list2.size(); i++) {
87             System.out.println(list2.get(i));
88             out.write(list2.get(i) + " ");
89         }
90         br.close();
91         out.close();
92         return max;
93     }
94 }

 

posted @ 2023-02-28 17:04  旺旺大菠萝  阅读(31)  评论(0编辑  收藏  举报