• 第十五周课堂练习-查找最长单词链


    (1)设计思路:定义几个数组:

    1单词数组,用来存放所有的单词

    2长度数组:用来存放从每一个单词开始,单词链的长度

    3结果数组:用来存放从每一个单词开始的单词链

    用每一个单词查询单词链,并用以上数组保存结果,再从长度数组中提取最大数的下标,输出结果数组该下标对应的字符串即可。

    (2)程序源代码:

    
    

    package fileread;

    
    

    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.FileReader;
    import java.io.OutputStream;

    
    

    public class text15 {

    
    

    public static void main(String[] args) {
    // TODO Auto-generated method stub
    try {
    BufferedReader reader = new BufferedReader(new FileReader("C:\text.txt"));
    StringBuffer string = new StringBuffer();//利用可追加可修改的StringBuffer类对象来储存全部的内容
    String line =null;
    while ((line=reader.readLine())!= null){
    string.append(line);
    }
    String str = string.toString().toLowerCase(); // 将stringBuffer转为字符并转换为小写
    String[] words = str.split("[^(a-zA-Z)]+"); //正则表达式分为单词数组
    int further;//之前检测的单词对应的下标
    int [] length = new int [words.length];//保存长度的数组
    String [] result = new String [words.length];//结果 数组
    for(int i=0;i<length.length;i++){
    length[i] = 1;
    }
    for(int i=0;i<words.length;i++){
    result[i] = words[i] + " ";
    further = i;//将第一个检测的单词的下标赋值给further,继续向下检测
    for(int j=i+1;j<words.length;j++){
    if(words[further].charAt(words[further].length()-1)==words[j].charAt(0)){
    result[i] = result[i] + words[j] + " ";//结果集加上当前单词
    length[i]++;//长度加一
    further=j;//当前检测的变为之前的
    }
    }
    }
    //找到长度数组中
    int maxlength = 0;//记录长度数组中的最大值
    int maxnum = 0;//记录长度数组中最大数对应的下标,也就是从第几个单词开始的长度对长
    for(int i=0;i<length.length;i++){
    if(length[i]>maxlength){
    maxlength = length[i];
    maxnum = i;
    }
    }
    //此时,result[maxnum]即为要输出的内容
    if(maxnum==1){
    System.out.println("没有首尾连接的单词");
    }else{
    File file = new File("C:\result.txt");
    //用FileOutputSteam包装文件,并设置文件可追加
    OutputStream out = new FileOutputStream(file,true);
    out.write(result[maxnum].getBytes()); //向文件中写入数据
    reader.close();
    out.close();
    }
    }catch (Exception e)
    {
    e.printStackTrace();
    }
    }
    }

     

    (3)运行结果:

    text.txt文件(《飘》的第一章):

    result.txt文件:

    (4)总结:因为在代码中用到了双重循环,会使代码运行时间大大加长,我还没有找到用一层循环就可以得到结果的方法。

  • 相关阅读:
    一、
    【2019-11-25】美好需要主动去发现
    《软件方法(上)》读书笔记
    【2019-11-24】读书让人美丽
    【2019-11-23】让别人来管理自己
    【2019-11-22】不聪明只有靠笨方法了
    【2019-11-21】要像人一样思考
    【2019-11-20】作为丈夫的反省
    【2019-11-19】基础科学的意义发现
    【2019-11-18】重新审视一下自己的思维
  • 原文地址:https://www.cnblogs.com/123456www/p/10990070.html
Copyright © 2020-2023  润新知