首页 > 其他分享 >2-27总结

2-27总结

时间:2023-02-27 17:36:25浏览次数:37  
标签:总结 文件 27 System println new txt out

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

、题目内容:

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

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

、题目要求:

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

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

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

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

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

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

 

package test;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
public class find {
 
     public static void main(String []srgs){    
            
            File file = new File("D:\\input20213866.txt"); 
            System.out.println("判断文件格式是否正确:");
            if(file.exists() && file.length() == 0) {  
                System.out.println("  文件为空!");
                System.exit(0);   
            } else if(oneWord()){
                System.out.println("  文件只有一個單詞!");
                System.exit(0);
            }else{
                System.out.println("  文件内容有效。");
                achieve();
            }     
        }
        
        
        /*
         * 判断只有一个单词
         */
        public static boolean oneWord(){
            ArrayList<String> list = new ArrayList<String>();
            String pathname = "D:\\input20213866.txt";
            int i = 0;
            try (
                    FileReader reader = new FileReader(pathname);
                    BufferedReader br = new BufferedReader(reader)    
               // 建立一个对象,它把文件内容转成计算机能读懂的语言
                ) {
                String line;
                //网友推荐更加简洁的写法
                while ((line = br.readLine()) != null) {
                    // 一次读入一行数据
                    list.add(line);
                    i++;
                } 
            } catch (IOException e) {
                e.printStackTrace();
            }
            if(i<=1){
                return true;
            }else{
                return false;
            }
        }
        
        /*
         * 获取单词首尾字母的方法
         */
        public static void print(){
            String a = "sadfg";
            System.out.println(a.substring(0,1));//获取首字母
            System.out.println(a.substring(a.length()-1,a.length()));//获取尾字母
        }
        
        
        /*
         * 读取txt文件,并且存到ArrayList集合中,找出接龙单词 存入ArrayList1集合,
         * 把ArrayList1集合写入output1文件
         */
        public static void achieve() {
            ArrayList<String> list = new ArrayList<String>();
            ArrayList<String> list1 = new ArrayList<String>();//存储遍历结果
            
            String pathname = "D:\\input20213866.txt"; // 绝对路径或相对路径都可以,写入文件时演示相对路径,读取以上路径的input.txt文件
            String writename = "D:\\output20213866.txt";
            //防止文件建立或读取失败,用catch捕捉错误并打印,也可以throw;
            //不关闭文件会导致资源的泄露,读写文件都同理
            //Java7的try-with-resources可以优雅关闭文件,异常时自动关闭文件;详细解读https://stackoverflow.com/a/12665271
            try (FileReader reader = new FileReader(pathname);
                 BufferedReader br = new BufferedReader(reader); // 建立一个对象,它把文件内容转成计算机能读懂的语言
                    FileWriter writer = new FileWriter(writename);
                    BufferedWriter out = new BufferedWriter(writer)
                ) {
                String line;
                //网友推荐更加简洁的写法
//                System.out.println("遍历readline");
                while ((line = br.readLine()) != null) {
                    // 一次读入一行数据
//                    System.out.println(line);
                    list.add(line);
                }
                System.out.println("遍历所有单词集合(arraylist):");
                for (int i = 0; i < list.size(); i++) {
                    System.out.println(list.get(i));
                }
                
                
                String word0 = list.get(0);
                list1.add(word0);
                String word = " ";//用来存储单词 
                for(int j = 1;j < list.size();j++){
                    word = list.get(j);
                    if(word.substring(0,1).equals(word0.substring(word0.length()-1,word0.length())) )
                        //不能用“==”判断字符串的等价,要用equals!!!!!!!!!!!!!!!!!!!!!!!!
                    {
                        list1.add(word);
                        word0 = word;
                    }
                }
                //打印list1
                System.out.println("遍历list1");
                //把list1中的结果写入output1.txt文件
                for (int g = 0; g < list1.size(); g++){
                  System.out.println(list1.get(g));
                  out.write(list1.get(g));
                  out.write(" ");
                }
                
                System.out.println("程序结束!");
                
        
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        
        /*
         * txt文件的读取
         */
        public static void readFile() {
            String pathname = "input20213866.txt"; 
            //不关闭文件会导致资源的泄露,读写文件都同理
            //Java7的try-with-resources可以优雅关闭文件,异常时自动关闭文件;详细解读https://stackoverflow.com/a/12665271
            try (FileReader reader = new FileReader(pathname);
                 BufferedReader br = new BufferedReader(reader) // 建立一个对象,它把文件内容转成计算机能读懂的语言
            ) {
                String line;
                while ((line = br.readLine()) != null) {
                    // 一次读入一行数据
                    System.out.println(line);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        
        /*
         *txt文件的写入
         */
        public static void writeFile() {
            try {
                File writeName = new File("D:\\output20213866.txt"); 
                writeName.createNewFile(); //创建新文件,有同名的文件的话直接覆盖
                try (
                        FileWriter writer = new FileWriter(writeName);
                        BufferedWriter out = new BufferedWriter(writer)
                ) {
                    out.write("我会写入文件啦!\r\n"); // \r\n为换行
                    out.flush(); // 把缓存区内容压入文件
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }

标签:总结,文件,27,System,println,new,txt,out
From: https://www.cnblogs.com/lvxiaotong/p/17160552.html

相关文章

  • 2月27日课后总结
    2/27课后总结函数参数两类#形参#defmy_func(a,b):a和b都是形参定义函数时写在括号内的#实参 #my_func(1,2)1和2都是实参,调用函数时写在括号内的......
  • Vue3开发效率总结
    https://zhuanlan.zhihu.com/p/601715098依赖注入依赖注入:将实例变量传入到一个对象中去在Vue中父组件中声明依赖,将他们注入到子孙组件实例中去,很大程度上代替全局状态......
  • 2023.2.27周一每日总结
    今天上课老师讲解了程序的组成,以及在我们以后的编程过程中最重要的是什么,通过课堂练习帮助我们理解如何逐步优化自己的代码,进而使程序更加简单易懂,举了飞机失事时程序出......
  • 基础知识总结02
    Day05方法方法是一种语法结构,就是一段功能结构封装在一个方法中。方便重复调用。具有特殊功能的代码块特殊功能:方法里面的代码写了啥,这个方法就具备什么功能。代码块:......
  • 算法刷题 Day 57 | ● 647. 回文子串 ● 516.最长回文子序列 ● 动态规划总结篇
    详细布置647.回文子串动态规划解决的经典题目,如果没接触过的话,别硬想直接看题解。https://programmercarl.com/0647.%E5%9B%9E%E6%96%87%E5%AD%90%E4%B8%B2.htm......
  • javascript 高级编程 之 Array 用法总结
    引用类型是一种数据结构,用于将数据和功能联系起来。创建对象的方式:1.new操作符vararray=newArray();2.字面量表示法创建vararray=[];Array检测数组:检测数组......
  • 【LeetCode】27. 移除元素
    移除指定元素时间复杂度O(n)空间复杂度O(1)classSolution{public:intremoveElement(vector<int>&nums,intval){intfast,low;for(f......
  • 滴水 2.27 --事件
    第二个参数false会把已通知改为未通知true需要自己动手改为已通知第二个参数false会把已通知改为未通知点击查看代码 4、线程控制实验:只读形式的线程控制 ......
  • Go组件库总结之介入式链表
    本篇文章我们用Go封装一个介入式的双向链表,目的是将链表的实现和具体元素解耦。文章参考自:https://github.com/brewlin/net-protocol1.元素的接口typeElementinterface......
  • 数据结构刷题2023.02.27小记
    单循环链表A从表中任一结点出发都能扫描到整个链表B不再需要头指针了C在进行插入、删除操作时,能更好地保证链表不断开D已知某个结点的位置后,能够容易找到它的直接......