https://www.processon.com/view/link/5b1a3880e4b00490ac8f5f40

改善后: (可将不管一行有几个字时的不规律的文本,按行倒写)

package 换行诗;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.ArrayList; public class Poem{ public static void main(String[] args) { InputStream is = null;
OutputStream os = null;
OutputStreamWriter osw = null;
InputStreamReader isr = null; try {
is = new FileInputStream("test1.txt");
os = new FileOutputStream("test2.txt");
isr = new InputStreamReader(is, "UTF-8");
osw = new OutputStreamWriter(os, "UTF-8"); ArrayList<String> one = getDataInt(isr);
ArrayList<String> two = getList(one); for (String x : two) {
System.out.print(x);
osw.write(x);
} } catch (Exception e) { e.printStackTrace();
} finally {
{
try {
if (osw != null)
osw.close();
} catch (IOException e) {
e.printStackTrace();
} try {
if (isr != null)
isr.close();
} catch (Exception e) {
e.printStackTrace();
} try {
if (os != null)
os.close();
} catch (Exception e) {
e.printStackTrace();
} try {
if (is != null) {
is.close();
} } catch (Exception e) {
e.printStackTrace();
} }
}
} //////////////////////////////////////////////////////////// public static ArrayList<String> getDataInt(InputStreamReader isr) {
ArrayList<String> dataStrList = new ArrayList<>();
int data = 0;
String dataStr = "";
char c;
String chineseLine = "";
try {
while ((data = isr.read()) != -1) {
dataStr += data + "";
c = (char) data;
chineseLine += c;
if (dataStr.endsWith("1310")) {
dataStrList.add(chineseLine);
dataStr = "";
chineseLine = "";
}
} // while_END
chineseLine += "\n";
dataStrList.add(chineseLine);
// 如果诗和词是一整行 或者 遇到最后一行没有回车换行表示,就存入 } catch ( IOException e) {
e.printStackTrace();
} finally {
try {
if (isr != null)
isr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return dataStrList;
} /////////////////////////////////////////////////////////////// public static ArrayList<String> getList(ArrayList<String> one) {
int w;
String poem = null;
ArrayList<String> cutes = new ArrayList<>(); int dataIndex = one.size() - 1;
for (w = dataIndex; w >= 0; w--) {
poem = one.get(w);
cutes.add(poem);
} return cutes;
} }

初版(只能针对五言绝句)

package 换行诗;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.ArrayList; public class Test9 implements Runnable { public static void main(String[] args) {
Runnable r1 = new Test9();
Thread t1 = new Thread(r1);// t1线程 Test9 test = new Test9();
// t1.start();
InputStream is = null;
OutputStream os = null;
OutputStreamWriter osw = null;
InputStreamReader isr = null; try {
is = new FileInputStream("test1.txt");
os = new FileOutputStream("test2.txt");
isr = new InputStreamReader(is, "UTF-8");
osw = new OutputStreamWriter(os, "UTF-8"); ArrayList<Integer> one = test.getDataInt(isr);
ArrayList<Integer> two = test.getList(one);
final String ANTI_POEM = test.getAntiPoem(two); System.out.println(ANTI_POEM);
osw.write(ANTI_POEM); } catch (Exception e) { e.printStackTrace();
} finally {
{
try {
if (osw != null)
osw.close();
} catch (IOException e) {
e.printStackTrace();
} try {
if (isr != null)
isr.close();
} catch (Exception e) {
e.printStackTrace();
} try {
if(os != null)
os.close();
}catch (Exception e) {
e.printStackTrace();
} try {
if(is != null) {
is.close();
} }catch (Exception e) {
e.printStackTrace();
} }
}
} ///////////////////////////////////////////////////// private String getAntiPoem(ArrayList<Integer> two) {
String poems = "";
// 换行计数
int _1310 = 5;
int _count = 0;
int strAnd_n = 0;
for (int e = 0; e < two.size(); e++) {
poems += String.valueOf((char) ((int) (two.get(e))));
if (poems.length() == _1310) {
poems += "\n";// 假设为6
_count++;
if (_count == 1) {
strAnd_n = poems.length();
}
if (_count < 3) {
_1310 += strAnd_n;
}
}
}
return poems;
} //////////////////////////////////////////////////////////// public ArrayList<Integer> getDataInt(InputStreamReader isr) {
ArrayList<Integer> dataInt = new ArrayList<>();
int data = 0;
String dataStr = "";
try {
while ((data = isr.read()) != -1) {
dataStr = data + "";
if (dataStr.length() == 5) {
dataInt.add(data);
} }
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (isr != null)
isr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return dataInt;
} /////////////////////////////////////////////////////////////// public ArrayList<Integer> getList(ArrayList<Integer> dataInt) {
int w;
int index; int dataIndex = dataInt.size() - 1;
ArrayList<Integer> cutes = new ArrayList<>();
for (w = dataIndex; w >= 4; w--) {
for (int l = 0; l < 5; l++) {
index = (w - 4 + l);
cutes.add(dataInt.get(index));
}
w -= 4;
}
return cutes; } InputStream inThread = null;
OutputStream outThread = null;
InputStreamReader isrThread = null;
OutputStreamWriter oswThread = null; @Override
public void run() {
try {
inThread = new FileInputStream("hello.txt");
outThread = new FileOutputStream("hello1.txt");
isrThread = new InputStreamReader(inThread, "utf-8");
oswThread = new OutputStreamWriter(outThread, "utf-8");
final String ANTI_POEM = getAntiPoem(getList(getDataInt(isrThread)));
oswThread.write(ANTI_POEM);
System.out.println(ANTI_POEM);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (oswThread != null)
oswThread.close();
} catch (Exception e) {
e.printStackTrace();
} try {
if (isrThread != null)
isrThread.close();
} catch (Exception e) {
e.printStackTrace();
} try {
if (outThread != null)
outThread.close();
} catch (Exception e) {
e.printStackTrace();
} try {
if (inThread != null)
inThread.close();
} catch (IOException e) {
e.printStackTrace();
} } } }

使用InputStreamReader读入,使用OutputStreamWriter写出,将一首诗按行重写?的更多相关文章

  1. python3 csv数据读入/写出

    这是读入 1 import csv 2 #打开文件,用with打开可以不用去特意关闭file了,python3不支持file()打开文件,只能用open() 3 with open("XXX ...

  2. java中的文件读取和文件写出:如何从一个文件中获取内容以及如何向一个文件中写入内容

    import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.Fi ...

  3. PAT 1002. 写出这个数 (20)

    读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式:每个测试输入包含1个测试用例,即给出自然数n的值.这里保证n小于10100. 输出格式:在一行内输出n的各位数字之和的每 ...

  4. PAT乙级 1002. 写出这个数 (20)

    1002. 写出这个数 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 读入一个自然数n,计算其各位数字 ...

  5. PAT 07-0 写出这个数

    用拼音输出一个数字的各位数字之和,这个或许比上面的标题恰当.这里我第一次用到了sprintf()(stdio.h)这个函数,我本来是要找itoa()(stdlib.h)函数来着,查资料一看,说这个函数 ...

  6. PAT (Basic Level) Practise:1002. 写出这个数

    [题目链接] 读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式:每个测试输入包含1个测试用例,即给出自然数n的值.这里保证n小于10100. 输出格式:在一行内输出n的各 ...

  7. PAT乙级真题1002. 写出这个数 (20)(解题)

    读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式:每个测试输入包含1个测试用例,即给出自然数n的值.这里保证n小于10100. 输出格式:在一行内输出n的各位数字之和的每 ...

  8. PAT-乙级-1002. 写出这个数 (20)

    1002. 写出这个数 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 读入一个自然数n,计算其各位数字 ...

  9. PAT_1002 写出这个数

    宝宝不开心了.自从回家开始百练就上不去POJ也上不去,今天突然HDU也上不去了,PAT25分的题目都快更新完了.我就按顺序往下面更新了.回学校之后题目质量能高出不少= =. 问题描述: 读入一个自然数 ...

随机推荐

  1. oracle(一)复习起航

    住了三年的宿舍,前几天不得不搬走.也断了好几天网,所以顺手拿了本以前买的<oracle编程艺术>,感觉翻译的书就是有些地方读起来不通顺,好吃力. 还好以前有点oracle经验,不然真看不懂 ...

  2. gradle多工程依赖

    多工程依赖:http://blog.csdn.net/w8452960/article/details/53415415 https://www.cnblogs.com/softidea/p/4525 ...

  3. PAT Radix[二分][进制转换][难]

    1010 Radix (25)(25 分) Given a pair of positive integers, for example, 6 and 110, can this equation 6 ...

  4. weka数据挖掘拾遗(二)---- 特征选择(IG、chi-square)

    一.说明 IG是information gain 的缩写,中文名称是信息增益,是选择特征的一个很有效的方法(特别是在使用svm分类时).这里不做详细介绍,有兴趣的可以googling一下. chi-s ...

  5. 2018-2019-2 网络对抗技术 20165324 Exp1:PC平台逆向破解

    2018-2019-2 网络对抗技术 20165324 Exp1:PC平台逆向破解 实验: 要求: 掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码(0.5分) 掌握反汇编与十六进制编 ...

  6. iOS 网易彩票-4设置模块一

    概述 基本上,每一款APP都有相应的设置模块.怎么设置才能更灵活和通用呢,这也是大家一直思考的.下面说说在网易彩票中,设置模块的设置思想. 基本上有三种方案: static cell(呆板,完全没有动 ...

  7. iOS 网易彩票-2框架搭建-代码重构

    在上一篇中,我们基本已经把整个框架都搭建出来了,下面进行代码重构一下. 思路: 导航按钮,按下时,会变灰,那是系统自带了,通过自定义UIButton,实现按下按钮立即切换效果. MJTabBarCon ...

  8. linux基础命令---rm

    rm 删除文件和目录,默认情况下不会删除目录. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE.Fedora. 1.语法       rm [选项]  ...

  9. python学习读取配置文件

    配置文件作为一种可读性很好的格式,非常适用于存储程序中的配置数据. 在每个配置文件中,配置数据会被分组(比如“config”和 “cmd”). 每个分组在其中指定对应的各个变量值.如下: # 定义co ...

  10. centos上安装python3.6

    安装python3.6可能使用的依赖 # yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sql ...