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            @Override
038            public char charAt(int index) {
039                    return chars[index];
040            }
041    
042            @Override
043            public int length() {
044                    return chars.length;
045            }
046    
047            @Override
048            public CharSequence subSequence(int start, int end) {
049                    char[] dest = new char[end-start];
050                    System.arraycopy(chars, start, dest, 0, end-start);
051                    return new CharSequenceImpl(dest);
052            }
053    
054            @Override
055            public String toString() {
056                    return str;
057            } 
058            
059            public String toLowerCaseString() {
060                    return lcStr;
061            } 
062    }