标签:之间 文本 没有 添加 adl 题目 buffered reader user
公司的一个面试题, 自己简单做了一下, 要求是: 一个笑话文本(joke.txt), 其中这个文本每个笑话之间是以空行分割, 文本开头没有空行, 文本结尾有空行, 要求: 读取这个文本并随机输出其中的一个笑话.
这个题目可能有多种方法, 其中我的思路是: 获取文本中空格的下标, 取两个相邻下标之间的文本,然后输出, 具体的实现如下代码:
package com.zz.company.jvm.demo.IO; import lombok.extern.slf4j.Slf4j; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.List; /** * @author Admin * @Description 一个笑话文本(joke.txt), 其中这个文本每个笑话之间是以空行分割, 文本开头没有空行, 文本结尾有空行, 要求: 读取这个文本并随机输出其中的一个笑话, * @date 2021/5/28 16:40 */ @Slf4j public class FileDemo { public static void main(String[] args) throws IOException { List<String> strList = new ArrayList<>(); List<Integer> indexList = new ArrayList<>(); //读取桌面的笑话txt文件 FileReader fr = new FileReader("C:\\Users\\Admin\\Desktop\\joke.txt"); BufferedReader br = new BufferedReader(fr); String str = null; //把所以字符行添加到strList中(包括空行) while ((str = br.readLine()) != null) { strList.add(str); } //收集strList中所有的空行的下标,并把下标存到indexList中, 等下要利用下标获取笑话文本 for (int i = 0; i < strList.size(); i++) { String s = strList.get(i); if ("".equals(s)) { indexList.add(i); } } //随机获取indexList中的下标 int size = indexList.size(); int randomIndex = (int) (Math.random() * size); //遍历list, 获取两个下标之间的笑话并输出 for (int i1 = 0; i1 < strList.size(); i1++) { //如果随机下标正好是文末的空行, 则取第一个笑话 if (randomIndex == size - 1 && i1 > 0 && i1 < indexList.get(0)) { System.out.println(strList.get(i1)); //其他的取两个空行之间的笑话 } else if (randomIndex != size - 1 && i1 > indexList.get(randomIndex) && i1 < indexList.get(randomIndex + 1)) { System.out.println(strList.get(i1)); } } br.close(); } }
总结:
标签:之间 文本 没有 添加 adl 题目 buffered reader user
原文地址:https://www.cnblogs.com/keepRunningPlease/p/14832348.html