001    package railo.commons.lang;
002    
003    
004    public class CharSequenceImpl implements CharSequence {
005            
006            private final char[] chars;
007            private final String str;
008            private final String lcStr;
009    
010            /**
011             * Constructor of the class
012             * @param chars
013             */
014            public CharSequenceImpl(char[] chars) {
015                    this.str=new String(chars);
016                    this.chars=chars;
017                    
018                    char c;
019                    for(int i=0;i<chars.length;i++) {
020                c=chars[i];
021                if(!((c>='a' && c<='z') || (c>='0' && c<='9'))) {
022                    lcStr=str.toLowerCase();
023                    return ;
024                }
025            }
026                    lcStr=str;
027            }
028            
029            /**
030             * Constructor of the class
031             * @param str
032             */
033            public CharSequenceImpl(String str) {
034                    this(str.toCharArray());
035            }
036    
037            /**
038             * @see java.lang.CharSequence#charAt(int)
039             */
040            public char charAt(int index) {
041                    return chars[index];
042            }
043    
044            /**
045             * @see java.lang.CharSequence#length()
046             */
047            public int length() {
048                    return chars.length;
049            }
050    
051            /**
052             * @see java.lang.CharSequence#subSequence(int, int)
053             */
054            public CharSequence subSequence(int start, int end) {
055                    char[] dest = new char[end-start];
056                    System.arraycopy(chars, start, dest, 0, end-start);
057                    return new CharSequenceImpl(dest);
058            }
059    
060            /**
061             *
062             * @see java.lang.Object#toString()
063             */
064            public String toString() {
065                    return str;
066            } 
067            
068            public String toLowerCaseString() {
069                    return lcStr;
070            } 
071    }