关于一道J笔试或者机试题的Java实现:从键盘输入一串字符,翻转后输出(要求不使用string相关类即对象)

答案程序如下:

import java.io.*;
public class Apple{
public static void main(String args[]){
char ch[]=new char[40]; //定义个一个字符数组,用来存放获取的字符
System.out.println("请输入一串字符:");
try{
BufferedReader buffer = new BufferedReader(new InputStreamReader(System.in));
buffer.read(ch,1,39); //将字符读入数组的某一部分
System.out.println("翻转后如下:");
for(int i=39;i>0;i--){
System.out.print(ch[i]);
}
System.out.println("");
}catch(IOException e){
e.printStackTrace();
}
}
}

***********************************************************

从Java角度看,本人认为解决方法仅此一种,关键在public int read(char[] cbuf,int off, int len)方法的使用!

API对此方法的介绍如下:

read

public int read(char[] cbuf,
                int off,
                int len)
         throws IOException
将字符读入数组的某一部分。

此方法实现 Reader 类相应 read 方法的常规协定。另一个便捷之处在于,它将通过重复地调用底层流的 read 方法,尝试读取尽可能多的字符。这种迭代的 read 会一直继续下去,直到满足以下条件之一:

  • 已经读取了指定的字符数,
  • 底层流的 read 方法返回 -1,指示文件末尾(end-of-file),或者
  • 底层流的 ready 方法返回 false,指示将阻塞后续的输入请求。
如果第一次对底层流调用 read 返回 -1(指示文件末尾),则此方法返回 -1。否则此方法返回实际读取的字符数。

鼓励(但不是必须)此类的各个子类以相同的方式尝试读取尽可能多的字符。

一般来说,此方法从此流的字符缓冲区中获得字符,根据需要从底层流中填充缓冲区。但是,如果缓冲区为空、标记无效,并且所请求的长度至少与缓冲区相同,则此方法将直接从底层流中将字符读取到给定的数组中。因此多余的 BufferedReader 将不必复制数据。

 

指定者:
Reader 中的 read
参数:
cbuf - 目标缓冲区
off - 开始存储字符处的偏移量
len - 要读取的最大字符数
返回:
读取的字符数,如果已到达流末尾,则返回 -1
抛出:
IOException - 如果发生 I/O 错误
相关文章
相关标签/搜索