今天上课留下的任务是计算出一篇英语文本中最长且不重复的单词链。
在知道这个要求时,我先判断出它需要对文件进行操作以及一定会用到至少两个数组。我计划先将文件中的单词存在一个数组中,再用一个新数组存储单词链,为了解决新数组中开始没有单词的问题,我先让新数组默认第一个单词为文件第一个单词,第一次循环用continue维持接下来的循环,当判断到文件中下一个单词确实和新数组中最后一个单词首尾字母相同时,再用一个循环判断该单词是否与之前存入新数组中的单词重复,当满足首尾相同以及不重复时,该单词才会存入新数组中。下面是源代码:
package study;
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 ddanci {
public static void main(String[] args) {
File file = new File("F:\\input1.txt");
try {
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
if (file.exists())
System.out.println("文件存在");
else
System.out.println("文件不存在");
StringBuffer sb = new StringBuffer();
String l;
while ((l = br.readLine()) != null) {
sb.append(l);// 将读取的数据存入一个字符串中
}
br.close();
String str = sb.toString().toLowerCase();// 转化为小写
String[] data = str.split("[^(a-zA-Z)]+");
String[] b = new String[data.length];
for (int i = 0; i < b.length; i++)// 将读取的单词存入数组中
{
b[i] = data[i];
}
int i = 1;
int j = 0;
int y = 0;
String[] a = new String[b.length];
a[0] = b[0];
for (; j < b.length; j++) {
if (a[i - 1].equals(b[j]))
continue;
if (a[i - 1].charAt(a[i - 1].length() - 1) == b[j].charAt(0)) {
for (int e = 0; e < a.length; e++) {
if (b[j].equals(a[e]))
y++;
}
if (y == 0) {
a[i] = b[j];
i++;
}
y = 0;
}
}
FileWriter fw = new FileWriter("F:\\output1.txt");
BufferedWriter bw = new BufferedWriter(fw);
for (i = 0; i < a.length; i++) {
if (a[i] != null) {
bw.write(a[i]); // 向文件中写入数据
bw.write('\r');
bw.write('\n');
} else if (a[i] == null) {
System.out.println(" ");
}
}
bw.close(); // 关闭输出流
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
在写这个代码时,最大的问题就是我在得出一个单词最后一位时,我用的charAt()方法,但在实际运行过程中,一直会出现空指针的问题,后来我分析得知,开始的代码中在判断新单词与新数组之前的单词重复时,无论是否重复以至于是否存入新数组中,新数组都会向后移一位,导致当次判断虽然不会出错,但是在下一次循环中,没存入新单词的那一位必然是空的,这导致空指针的问题,后来我把新数组向后移一位的操作放在了内层循环之中,只有向新数组中存入一个新单词后,才会向后移,自此,问题就全部解决了。
标签:上课,测试,第三周,单词,length,数组,import,new,String From: https://www.cnblogs.com/zjsdbk/p/17164278.html