PageRenderTime 54ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/src/main/java/com/humaorie/dollar/CharSequenceWrapper.java

https://bitbucket.org/dfa/dollar/
Java | 162 lines | 114 code | 31 blank | 17 comment | 13 complexity | aa12259791bf62e1d66f9cb4203b679b MD5 | raw file
  1. package com.humaorie.dollar;
  2. /*
  3. * Dollar, http://bitbucket.org/dfa/dollar
  4. * (c) 2010, 2011 Davide Angelocola <davide.angelocola@gmail.com>
  5. *
  6. * This program is free software: you can redistribute it and/or modify
  7. * it under the terms of the GNU Lesser Public License as published by
  8. * the Free Software Foundation, either version 3 of the License, or
  9. * any later version.
  10. *
  11. * This program is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. * GNU Lesser Public License for more details.
  15. *
  16. * You should have received a copy of the GNU General Public License
  17. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  18. */
  19. import com.humaorie.dollar.Dollar.Wrapper;
  20. import java.util.Iterator;
  21. import java.util.Random;
  22. import java.util.NoSuchElementException;
  23. class CharSequenceWrapper extends AbstractWrapper<Character> {
  24. private final CharSequence charSequence;
  25. public CharSequenceWrapper(CharSequence charSequence) {
  26. if (charSequence == null) {
  27. charSequence = "";
  28. }
  29. this.charSequence = charSequence;
  30. }
  31. @Override
  32. public Wrapper<Character> repeat(int n) {
  33. if (n < 0) {
  34. n = 0;
  35. }
  36. return new RepeatCharSequenceWrapper(charSequence, n);
  37. }
  38. @Override
  39. public Wrapper<Character> copy() {
  40. return new CharSequenceWrapper(charSequence);
  41. }
  42. @Override
  43. public Wrapper<Character> reverse() {
  44. return new CharSequenceWrapper(new StringBuilder(charSequence).reverse().toString());
  45. }
  46. @Override
  47. public Wrapper<Character> shuffle(Random random) {
  48. if (random == null) {
  49. random = new Random();
  50. }
  51. StringBuilder stringBuilder = new StringBuilder(charSequence);
  52. for (int i = 0; i < stringBuilder.length(); i++) {
  53. int j = random.nextInt(stringBuilder.length());
  54. char c = stringBuilder.charAt(i);
  55. stringBuilder.setCharAt(i, stringBuilder.charAt(j));
  56. stringBuilder.setCharAt(j, c);
  57. }
  58. return new CharSequenceWrapper(stringBuilder.toString());
  59. }
  60. @Override
  61. public int size() {
  62. return charSequence.length();
  63. }
  64. @Override
  65. public Wrapper<Character> slice(int i, int j) {
  66. if (i >= 0 && j < charSequence.length()) {
  67. return new CharSequenceWrapper(charSequence.subSequence(i, j));
  68. } else {
  69. return this;
  70. }
  71. }
  72. @Override
  73. public Iterator<Character> iterator() {
  74. return new CharSequenceIterator(charSequence);
  75. }
  76. static class CharSequenceIterator implements Iterator<Character> {
  77. private final CharSequence charSequence;
  78. private int i;
  79. public CharSequenceIterator(CharSequence charSequence) {
  80. this.charSequence = charSequence;
  81. this.i = 0;
  82. }
  83. @Override
  84. public boolean hasNext() {
  85. return i < charSequence.length();
  86. }
  87. @Override
  88. public Character next() {
  89. if (!hasNext()) {
  90. throw new NoSuchElementException();
  91. }
  92. return charSequence.charAt(i++);
  93. }
  94. @Override
  95. public void remove() {
  96. throw new UnsupportedOperationException("remove() not supported for CharSequenceWrapper");
  97. }
  98. }
  99. @Override
  100. public Wrapper<Character> sort() {
  101. return new CharacterArrayWrapper(charSequenceToArray(charSequence)).sort();
  102. }
  103. @Override
  104. public Character[] toArray() {
  105. return new CharacterArrayWrapper(charSequenceToArray(charSequence)).toArray();
  106. }
  107. @Override
  108. public boolean equals(Object object) {
  109. if (object instanceof CharSequenceWrapper) {
  110. CharSequenceWrapper charSequenceWrapper = (CharSequenceWrapper) object;
  111. return charSequence.equals(charSequenceWrapper.charSequence);
  112. } else {
  113. return false;
  114. }
  115. }
  116. @Override
  117. public int hashCode() {
  118. return charSequence.hashCode();
  119. }
  120. @Override
  121. public String toString() {
  122. return charSequence.toString();
  123. }
  124. private static char[] charSequenceToArray(CharSequence charSequence) {
  125. char[] array = new char[charSequence.length()];
  126. for (int i = 0; i < charSequence.length(); i++) {
  127. array[i] = charSequence.charAt(i);
  128. }
  129. return array;
  130. }
  131. }