zoukankan      html  css  js  c++  java
  • 计算最长英语单词链

    我的思路就是:先从input1里面读取文件,sb1.append(s1);方法逐行读取文件内容,不读取换行符和末尾的空格,将读取的字符串添加换行符后累加p存放在缓存中。接着将特殊符号,;.等用空格代替text.replace(array[j]," ");方法,然后用split方法按空格分割放到一个数组里。然后用subSequence方法取单词首字母,尾字母,两个for循环,如果前一个单词的尾字母等于后一个单词的首字母,用一个字符串连接起来这两个单词(空格分开),最后与一开始假设的最长单词链max比较,长的话则代替成为新的max,就这样循环找到最长单词链。

    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;
    public class Dragon {
        public static void main(String[] args) throws IOException {
             jieD();
            /*Read_File();*/
        }
        public static String[] Read_File()throws IOException {
        File file1 = new File("input1.txt");//定义一个file对象,用来初始化FileReader
        if (!file1.exists()) {// 如果文件打不开或不存在则提示错误
            System.out.println("您的文件不存在");
        }else {
            if(file1.exists() && file1.length() == 0) {  
                System.out.println("文件为空!");  
            }  
        }
        FileReader reader1 = new FileReader(file1);
        BufferedReader br=new BufferedReader(reader1);
        StringBuilder sb1 = new StringBuilder();//定义一个字符串缓存,将字符串存放缓存中
        String s1 = "";
        while ((s1 =br.readLine()) != null) {//逐行读取文件内容,不读取换行符和末尾的空格
        sb1.append(s1);//将读取的字符串添加换行符后累加p存放在缓存中
        }
        br.close();
        String text = sb1.toString();
        String[] array = {".",",","?","!",":","‘","’","“","”","—",";","-"};
        for (int j = 0; j < array.length; j++) {
            text = text.replace(array[j]," ");                      //将text中的array数组中包含的特殊字符用空格代替
        }
        String[] textArray = text.split(" ");  
        return textArray;
        /*for(int i=0;i<textArray.length;i++) {
            System.out.println(textArray[i]+" ");
        }*/    
        }
        public static void writeFile(String max) {
            
            File f=new File("output1.txt");
            if(!f.exists()) {
                try {
                    f.createNewFile();
                    System.out.println("output1.txt创建完成");
                } catch (IOException e) {
                    // TODO 自动生成的 catch 块
                    e.printStackTrace();
                    System.out.println("output1.txt创建失败");
                }            
            }    
            FileWriter fw;
            try {
                fw = new FileWriter(f);
            
            BufferedWriter bw=new BufferedWriter(fw);                
            bw.write(max);
            bw.close();
            fw.close();        
            } catch (IOException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }
    }
        public static void jieD() throws IOException {
            String textArray[]=Read_File();
    //        int a[]=new int[textArray.length];
    //        for(int k=0;k<textArray.length;k++) {
    //            a[k]=0;
    //        }
            for(int i=0;i<textArray.length;i++) {
                System.out.println(textArray[i]);
            }
            String str="";
            String max="";
            String word="";
            for(int i=0;i<textArray.length;i++) {
                if(!(textArray[i].equals(" "))) {
                 str=textArray[i];
                 word=str;/*前一个单词*/
                /*char s=textArray[i].charAt(0);*/
                /*System.out.println(s);*/
                 for(int j=i+1;j<textArray.length;j++) {
                     if(!(textArray[j].equals(" "))) {
                        if(textArray[j].toLowerCase().subSequence(0, 1).equals(word.toLowerCase().subSequence(word.length()-1, word.length()))) {/*toLowerCase() 方法用于把字符串转换为小写。*/
                            word = textArray[j];
                            str+=" "+word;
                        }
                 }
                 }
    
                    if(str.indexOf(" ")!=-1) {/*public int indexOf(int ch): 返回指定字符在字符串中第一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1。*/
                        if(str.length()>max.length()) {
                            max = str;
                        }
    //                    System.out.println(str);
                    }
            }
            }
            /*System.out.println(max);*/
            writeFile(max);
                    
                /*char m=textArray[i].charAt(str.length()-1);*/
                    /*for(int j=i+1;j<textArray.length;j++) {
                    char s1=textArray[j].charAt(0);
                    char m1=textArray[j].charAt(str.length()-1);
                    if(m==s1) {
                        System.out.println(str);
                        m=m1;
                    }
                }*/
        }    
    }

    截图:

    input1.txt

    output1.txt:

  • 相关阅读:
    使用memset()要注意
    UPC快速学习笔记之Collective Operations
    二叉搜索树(结点添加、后继搜索、前驱搜索、结点删除)
    十分愚蠢的错误记录(C++创建对象时new的问题)
    BFS和DFS分别用于有向图和无向图的一点心得和总结
    不要在if判断语句中同时声明变量,注意在if中同时赋值和判断的优先级
    C++内存泄漏姿势之——eof()和delete释放内存
    C++中"was not declared in this scope"问题记录;以及通过正则表达式提取文件中数字的方法
    论fork()函数的进阶使用
    页面的修改、添加,以及验证控件的常见应用
  • 原文地址:https://www.cnblogs.com/zzstdruan1707-4/p/11069878.html
Copyright © 2011-2022 走看看