要求:提示输入一个字符串,回车后屏幕显示字符串顺序倒置后的结果。
思想:用栈进行字符串逆序。首先字母从输入的字符串中开一个一个的提取出来,并压入栈中,接着它们依次弹出栈,并显示出来,因为栈后进先出的特性,字符串的顺序就颠倒过来了。
StackX类
public class StackX {
private int max_size; //栈最大容量
private char[] stackArray;
private int top; //栈顶下标
public StackX(int m){ //构造方法
max_size=m;
stackArray=new char[max_size];
top=-1;
}
public void push(char p1){ //进栈
stackArray[++top]=p1;
}
public char pop(){
return stackArray[top--]; //出栈
}
public char peek(){ //查看栈顶元素
return stackArray[top];
}
public boolean isEmpty(){ //判断栈是否为空
return (top==-1);
}
public boolean isFull(){ //判断是否已满
return (top==max_size-1);
}
}
Reverser类
public class Reverser {
private String input;
private String output;
public Reverser(String s){
input=s;
}
public String doRec(){ //字符串倒序方法
int max_size=input.length();
StackX s=new StackX(max_size); //创建大小为输入字符串长度的栈
for (int i=0;i<input.length();i++){
char c1=input.charAt(i);
s.push(c1); //循环入栈
}
output="";
while(!s.isEmpty()){
char c2=s.pop(); //出栈
output=output+c2; //字符串拼接,可直接用"+"
}
return output;
}
}
测试类RecerserApp
public class RecerserApp {
public static void main(String args[]){
String input,output;
while (true) {
System.out.println("请输入一个字符串:");
System.out.flush();
//flush();是流式输入输出常用的一个方法,表示强制请求清空缓冲区,让i/o系统立马完成它应该完成的输入、输出动作。
input=getString(); //接收从控制台输入的字符串
if(input.equals("")){
break;
}
Reverser theReverser=new Reverser(input);
output=theReverser.doRec();
System.out.println("转换后"+output);
}
}
/*
System.in 接受从控制台输入的字节。
new InputStreamReader(System.in);构造一个InputStreamReader对象,
这个对象是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。
BufferedReader br=new BufferedReader(isr)的作用是:
构造一个字符流的缓存,里面存放在控制台输入的字节转换后成的字符。
s=buf.readLine();从这个缓存中读取一行的内容。
通俗来说:nputStreamReader 就是一个可以从 System.in 里面读取东西的管道
然后BufferedReader 就是比InputStreamReader 更高级的 更粗点的管道
可以嵌套在InputStreamReader的外面 从而实现缓冲功能 并且可以用外层管道的readLine()方法读取一行数据
依次类推 一种低级字节流管道的管道 我们可以在其外面嵌套一个更高级的数据流管道 从而更加方便的读写数据
*/
public static String getString(){
InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(isr);
String s= null;
try {
s = br.readLine();
} catch (IOException e) {
e.printStackTrace();
}
return s;
}
}
运行结果: