1 package org.davidmoten.text.utils;
2
3 final class CharSequenceConcatRightTrim implements CharSequence {
4
5 private final CharSequence a;
6 private final CharSequence b;
7
8 CharSequenceConcatRightTrim(CharSequence a, CharSequence b) {
9 this.a = a;
10 this.b = b;
11 }
12
13 @Override
14 public int length() {
15 int i = a.length() + b.length() - 1;
16 while (i > 0 && Character.isWhitespace(charAt(i))) {
17 i--;
18 }
19 return i + 1;
20 }
21
22 @Override
23 public char charAt(int index) {
24 if (index < a.length()) {
25 return a.charAt(index);
26 } else {
27 return b.charAt(index - a.length());
28 }
29 }
30
31 @Override
32 public CharSequence subSequence(int start, int end) {
33 return new CharSequence() {
34
35 @Override
36 public int length() {
37 return end - start;
38 }
39
40 @Override
41 public char charAt(int index) {
42 return CharSequenceConcatRightTrim.this.charAt(start + index);
43 }
44
45 @Override
46 public CharSequence subSequence(int start2, int end2) {
47
48 StringBuilder s = new StringBuilder(end2 - start2);
49 for (int i = start2; i < end2; i++) {
50 s.append(charAt(i));
51 }
52 return s;
53 }
54
55 @Override
56 public String toString() {
57 StringBuilder s = new StringBuilder();
58 int len = length();
59 for (int i = 0; i < len; i++) {
60 s.append(charAt(i));
61 }
62 return s.toString();
63 }
64
65 };
66 }
67
68 @Override
69 public String toString() {
70 StringBuilder s = new StringBuilder();
71 int len = length();
72 for (int i = 0; i < len; i++) {
73 s.append(charAt(i));
74 }
75 return s.toString();
76 }
77
78 }