计算最长英语单词链

设计思想:将文本内的文章分割成单词,并对每个单词向后遍历,定义一个字符串用来储存连接后的单词链,再定义一个字符串用来储存每次遍历后最长的单词链。

package analyse_word;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.util.Scanner;
public class letter_follow_each_other_best {
 
 public static void OutputStream(String max) {
//  将数据写入文件
        PrintStream ps = null;
        try {
            ps = new PrintStream(new FileOutputStream("D:\\empty.txt"));
            //将标准输出重定向到ps输出流
            System.setOut(ps);
            //向标准输出输出一个字符串
            System.out.println(max);
            //向标准输出输出一个对象
        } catch (IOException ex) {
            ex.printStackTrace();
        } finally {
            if (ps != null) {
                ps.close();
            }
        }
 }
 public static void main(String[] args) throws FileNotFoundException {
  File file = new File("D:\\letter_follow_each_other_best.txt");// 读取文件
  if (!file.exists()) {// 如果文件打不开或不存在则提示错误
   System.out.println("文件不存在");
   return;
  }else {
   if(file.exists() && file.length() == 0) { 
       System.out.println("文件为空!"); 
       return;
   } 
  }
  long startTime = System.currentTimeMillis();
  String[] strs=new String[1000000];
  Scanner x = new Scanner(file);
  int i=0;
  boolean flag=false;
  while(x.hasNextLine()) {
   String[] str=x.nextLine().split("\\W+");
   for(int ms=0;ms<str.length;ms++) {
    if(!str[ms].equals("")&&str[ms].length()>2) {
     flag=false;
//     System.out.println(str[ms]);
     if(i!=0) {
      for(int t=0;t<i;t++) {
       if(!str[ms].equals(strs[t])) {
        flag=true;
       }
      }
     }else {
      flag=true;
     }
     
     if(flag) {
      strs[i]=str[ms];
      i++;
     }
     
    }
    
   }
  }
  if(i==1) {
   System.out.println("该文件只有一个单词!无法实现词语接龙");
  }
  String sentence = "";
  String word="";
  String max="";
  for(int m=0;m<i;m++) {
   sentence = strs[m];
   word = sentence;
   for(int j=m+1;j<i;j++) {
    if(strs[j].toLowerCase().subSequence(0, 1).equals(word.toLowerCase().subSequence(word.length()-1, word.length()))) {
     word = strs[j];
     sentence+="-"+word;
    }
   }
   
   if(sentence.indexOf("-")!=-1) {
    if(sentence.length()>max.length()) {
     max = sentence;
    }
//    System.out.println(sentence);
   }
   
  }
  long endTime = System.currentTimeMillis();
  System.out.println(endTime-startTime+"ms");
  System.out.println(i);
  if(max.length()!=0) {
   OutputStream(max);
//   System.out.println(max);
  }else {
   System.out.println("没有首尾相连");
  }
  
 }
}

 

转载于:https://www.cnblogs.com/goubb/p/11071074.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值