/src/main/java/com/humaorie/dollar/CharSequenceWrapper.java
Java | 162 lines | 114 code | 31 blank | 17 comment | 13 complexity | aa12259791bf62e1d66f9cb4203b679b MD5 | raw file
- package com.humaorie.dollar;
- /*
- * Dollar, http://bitbucket.org/dfa/dollar
- * (c) 2010, 2011 Davide Angelocola <davide.angelocola@gmail.com>
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
- import com.humaorie.dollar.Dollar.Wrapper;
- import java.util.Iterator;
- import java.util.Random;
- import java.util.NoSuchElementException;
- class CharSequenceWrapper extends AbstractWrapper<Character> {
- private final CharSequence charSequence;
- public CharSequenceWrapper(CharSequence charSequence) {
- if (charSequence == null) {
- charSequence = "";
- }
- this.charSequence = charSequence;
- }
- @Override
- public Wrapper<Character> repeat(int n) {
- if (n < 0) {
- n = 0;
- }
- return new RepeatCharSequenceWrapper(charSequence, n);
- }
- @Override
- public Wrapper<Character> copy() {
- return new CharSequenceWrapper(charSequence);
- }
- @Override
- public Wrapper<Character> reverse() {
- return new CharSequenceWrapper(new StringBuilder(charSequence).reverse().toString());
- }
- @Override
- public Wrapper<Character> shuffle(Random random) {
- if (random == null) {
- random = new Random();
- }
- StringBuilder stringBuilder = new StringBuilder(charSequence);
- for (int i = 0; i < stringBuilder.length(); i++) {
- int j = random.nextInt(stringBuilder.length());
- char c = stringBuilder.charAt(i);
- stringBuilder.setCharAt(i, stringBuilder.charAt(j));
- stringBuilder.setCharAt(j, c);
- }
- return new CharSequenceWrapper(stringBuilder.toString());
- }
- @Override
- public int size() {
- return charSequence.length();
- }
- @Override
- public Wrapper<Character> slice(int i, int j) {
- if (i >= 0 && j < charSequence.length()) {
- return new CharSequenceWrapper(charSequence.subSequence(i, j));
- } else {
- return this;
- }
- }
- @Override
- public Iterator<Character> iterator() {
- return new CharSequenceIterator(charSequence);
- }
- static class CharSequenceIterator implements Iterator<Character> {
- private final CharSequence charSequence;
- private int i;
- public CharSequenceIterator(CharSequence charSequence) {
- this.charSequence = charSequence;
- this.i = 0;
- }
- @Override
- public boolean hasNext() {
- return i < charSequence.length();
- }
- @Override
- public Character next() {
- if (!hasNext()) {
- throw new NoSuchElementException();
- }
- return charSequence.charAt(i++);
- }
- @Override
- public void remove() {
- throw new UnsupportedOperationException("remove() not supported for CharSequenceWrapper");
- }
- }
- @Override
- public Wrapper<Character> sort() {
- return new CharacterArrayWrapper(charSequenceToArray(charSequence)).sort();
- }
- @Override
- public Character[] toArray() {
- return new CharacterArrayWrapper(charSequenceToArray(charSequence)).toArray();
- }
- @Override
- public boolean equals(Object object) {
- if (object instanceof CharSequenceWrapper) {
- CharSequenceWrapper charSequenceWrapper = (CharSequenceWrapper) object;
- return charSequence.equals(charSequenceWrapper.charSequence);
- } else {
- return false;
- }
- }
- @Override
- public int hashCode() {
- return charSequence.hashCode();
- }
- @Override
- public String toString() {
- return charSequence.toString();
- }
- private static char[] charSequenceToArray(CharSequence charSequence) {
- char[] array = new char[charSequence.length()];
- for (int i = 0; i < charSequence.length(); i++) {
- array[i] = charSequence.charAt(i);
- }
- return array;
- }
- }