集册 Java实例教程 为反向字符串创建CharSequence实现

为反向字符串创建CharSequence实现

欢马劈雪     最近更新时间:2020-01-02 10:19:05

694
提示:您可在线编辑运行本教程的实例 - 运行实例,去试试!
为反向字符串创建CharSequence实现

// CharSequenceDemo presents a String value -- backwards.//n o w j a v a . c o m - 时  代  Java 提供

public class CharSequenceDemo implements CharSequence {

    private String s;


    public CharSequenceDemo(String s) {

        //It would be much more efficient to just reverse the string

        //in the constructor. But a lot less fun!

        this.s = s;

    }


    //If the string is backwards, the end is the beginning!

    private int fromEnd(int i) {

        return s.length() - 1 - i;

    }


    public char charAt(int i) {

        if ((i < 0) || (i >= s.length())) {

            throw new StringIndexOutOfBoundsException(i);

        }//时 代      J a v a   公   众 号 - nowjava.com 提供

        return s.charAt(fromEnd(i));

    }


    public int length() {

        return s.length();

    }


    public CharSequence subSequence(int start, int end) {

        if (start < 0) {

            throw new StringIndexOutOfBoundsException(start);

        }

        if (end > s.length()) {

            throw new StringIndexOutOfBoundsException(end);

        }

        if (start > end) {

            throw new StringIndexOutOfBoundsException(start - end);

        }

        StringBuilder sub = new StringBuilder(s.subSequence(fromEnd(end),

                fromEnd(start)));

        return sub.reverse();

    }


    public String toString() {

        StringBuilder s = new StringBuilder(this.s);

        return s.reverse().toString();

    }


    //Random int from 0 to max. As random() generates values between 0 and 0.9999

    private static int random(int max) {

        return (int) Math.round(Math.random() * (max + 1));

    }


    public static void main(String[] args) {

        CharSequenceDemo s = new CharSequenceDemo(

                "Write a class that implements the CharSequence interface found in the java.lang package.");


        //exercise charAt() and length()

        for (int i = 0; i < s.length(); i++) {

            System.out.print(s.charAt(i));

        }


        System.out.println("");


        //exercise subSequence() and length();

        int start = random(s.length() - 1);

        int end = random(s.length() - 1 - start) + start;

        System.out.println(s.subSequence(start, end));


        //exercise toString();

        System.out.println(s);


    }

}


展开阅读全文