Java 改写诗句,横的变竖的
两种方法
都是对文件的读写操作和二维数组的操作
- 前:
葡萄美酒夜光杯
欲饮琵琶马上催
醉卧沙场君莫笑
我是流氓我怕谁 - 后:
葡欲醉我
萄饮卧是
美琵沙流
酒琶场氓
夜马君我
光上莫怕
杯催笑谁
第一种,用二维数组
public static void reverseWord() throws IOException{
FileReader fr = new FileReader("F:/b.txt");
BufferedReader br = new BufferedReader(fr);
FileOutputStream fos = new FileOutputStream("F:/c.txt");
PrintWriter pw = new PrintWriter(fos,true); //true之后无需关闭
char[][] lines = new char[4][];
String str ;
System.out.println("前:");
for (int i = 0; i < lines.length; i++) {
str= br.readLine();
System.out.println(str);
lines[i]=str.toCharArray();
}
br.close();
char[][] reverse = new char[lines[0].length][lines.length];
for (int i = 0; i < reverse.length; i++) {
for (int j = 0; j < reverse[0].length; j++) {
reverse[i][j]=lines[j][i];
}
}
System.out.println("后:");
for (int i = 0; i < reverse.length; i++) {
str = new String(reverse[i]);
System.out.println(str);
pw.println(str);
}
//pw.close();
System.out.println("\n完毕!");
}
第二种,大师讲的, 结构清楚,用ArrayList,用了String种的charAt()方法。
public static void reverse() throws IOException{
//1.定义集合,存储古诗
List<String> poem = new ArrayList<>();
//2.定义节点流
InputStream is= new FileInputStream("F:/b.txt");
//3.包装成基本字符流
InputStreamReader isr = new InputStreamReader(is);
//4.包装成缓冲流
BufferedReader br = new BufferedReader(isr);
//5.读取字符串
String str=null;
//6.循环读取
while((str=br.readLine())!=null){
//7.把字符串放入集合
poem.add(str);
}
//8.关闭
br.close();
//9.打印到控制台
for (String s: poem) {
System.out.println(s);
}
//10.定义一个输出流,用来存放置换后的文字
FileOutputStream fos = new FileOutputStream("F:/c.txt");
PrintWriter pw = new PrintWriter(fos,true);
//11.得到原古诗行列
int row = poem.size(); //原来4行7列
int col = poem.get(0).length();
System.out.println(row+"行,"+col+"列。");
//12.行列置换
for (int i = 0; i < col; i++) { // 7 行
for (int j = row-1; j >=0; j--) { // 4列
//得到最后一行数据
char c = poem.get(j).charAt(i);
//把得到的字放到文件中
pw.print(c);
}
pw.println();
}
//pw.close(); //创建时用了自动清空的构造方法,此处可以不用关闭
System.out.println("完毕!");
}