java.lang.StringBuffer类中有一个reverse()方法,此reverse()方法的作用是将一个字符串逆序排列,那么此方法究竟是如何做到的呢?
学习过数据结构的人都知道,栈(Stack)的特性是后进先出,即最先存储到栈中的元素位于栈底,最后存储到栈中的元素位于栈顶,从栈中取出数据时,最先取出来的都是栈顶的元素,因此可以利用栈的这种特性实现单词逆序,下面是我使用栈来实现的将一个单词逆序的相关代码,实现的功能与 java.lang.StringBuffer类中有一个reverse()方法一模一样
- package datastructures.practise.stackandqueue;
- public class ReverseApp {
- public static void main(String[] args) {
- // StringBuffer类中reverse()方法实现的功能为将字符串HelloWorld逆序排列成dlroWolleH
- StringBuffer sbuffer = new StringBuffer("HelloWorld");
- System.out.println(sbuffer.reverse());// 输出的结果为:dlroWolleH
- // 实现与 StringBuffer类中reverse()方法一样的功能
- MyStringBuffer rv = new MyStringBuffer("HelloWorld");
- System.out.println(rv.reverse());// 输出的结果为:dlroWolleH
- }
- }
- /**
- * 定义一个栈类,此栈是用来作为字符串分解为一个个字符时的临时存储的数据结构
- *
- * @author 孤傲苍狼
- *
- */
- class StackX {
- private int maxSize;
- private char[] stackArray;
- private int stackTop;
- // ----------------------------------------------------------
- // 构造方法
- public StackX(int s) {
- maxSize = s;
- stackArray = new char[maxSize];
- stackTop = -1;
- }
- // ----------------------------------------------------------
- // 此方法是用来将一个字符存储到栈中
- public void push(char c) {
- stackArray[++stackTop] = c;
- }
- // 此方法是用来从栈中取出一个字符
- public char pup() {
- return stackArray[stackTop--];
- }
- // 此方法是用来查看位于栈顶的元素
- public char peek() {
- return stackArray[stackTop];
- }
- // 此方法是用来判断栈的存储空间是否已经满
- public boolean isFull() {
- return (stackTop == maxSize - 1);
- }
- // 此方法是用来判断栈是否已经清空
- public boolean ifEmpty() {
- return (stackTop == -1);
- }
- }
- class MyStringBuffer {
- private String input; // 输入的字符串
- private String output; // 反转输出后的字符串
- // ---------------------------------------------------------
- public MyStringBuffer(String input) {
- this.input = input;
- }
- /**
- * 此方法用来完成将一个字符串逆序排列
- *
- * @return
- */
- public String reverse() {
- int stackSize = input.length();// 得到字符串的长度
- StackX stack = new StackX(stackSize);// 根据字符串的长度确定栈数组的长度
- for (int i = 0; i < input.length(); i++) {
- char ch = input.charAt(i);// 循环取出字符串中的每一个字符
- System.out.println("当i=" + i + "时,取出的字符是:" + ch);
- stack.push(ch);// 把字符串分解成一个个字符存储到栈中
- System.out.println("存储到栈中的第" + (i + 1) + "个字符是:" + ch);
- }
- output = "";
- for (int i = 0; i < stackSize; i++) {
- char c = stack.pup();// 根据栈后进先出的特性,这里取出来的第一个字符将是最后加入到栈中的字符
- System.out.println("从栈中取出来的第" + (i + 1) + "个字符是:" + c);
- output += c;
- System.out.println("此时的output=" + output);
- }
- return output;
- }
- }
本文介绍了如何利用栈的后进先出特性实现字符串的逆序排列,通过创建StackX类并配合MyStringBuffer类,实现了与java.lang.StringBuffer.reverse()相同的功能,详细展示了代码实现过程。
7122

被折叠的 条评论
为什么被折叠?



