[英]how can I make charAt method work with arrays in java?
有人可以帮我解决这个问题吗? 我必须让方法 charAt 工作,但我不知道如何..
class AsciiCharSequence implements java.lang.CharSequence/* extends/implements */ {
// implementation
byte[] array;
public AsciiCharSequence(byte[] array) {
this.array = array.clone();
}
@Override
public int length() {
return array.length;
}
*@Override
public char charAt(int i) {
return (char) array.length(i);
}*
尝试这个:
@Override
public char charAt(int i) {
return (char) array[i];
}
由于您有一个数组并且想要返回特定数组中的字符。 在您的问题中,您没有返回特定的索引值。
使用[]
访问数组中的元素。 但是不要忘记抛出所需的异常,就像在CharSequence
文档中声明的那样(如果您访问的数组中的元素不正确,则会抛出另一种类型的异常)。
public class AsciiCharSequence implements CharSequence {
private static final char[] EMPTY_ARRAY = new char[0];
private final char[] arr;
public AsciiCharSequence(char[] arr) {
this.arr = arr == null || arr.length == 0 ? EMPTY_ARRAY : Arrays.copyOf(arr, arr.length);
}
private AsciiCharSequence(char[] arr, int start, int end) {
this.arr = arr == null || arr.length == 0 || start == end ? EMPTY_ARRAY : Arrays.copyOfRange(arr, start, end);
}
@Override
public int length() {
return arr.length;
}
@Override
public char charAt(int i) {
if (i < 0 || i >= length())
throw new IndexOutOfBoundsException();
return arr[i];
}
@Override
public AsciiCharSequence subSequence(int start, int end) {
if (start < 0 || end < 0)
throw new IndexOutOfBoundsException();
if (end > length())
throw new IndexOutOfBoundsException();
if (start > end)
throw new IndexOutOfBoundsException();
return new AsciiCharSequence(arr, start, end);
}
@Override
public String toString() {
return IntStream.range(0, arr.length).mapToObj(i -> String.valueOf(arr[i])).collect(Collectors.joining());
}
}
为了更好地理解字符集,可以参考下面来自AbstractStringBuilder的代码
@Override
public char charAt(int index) {
checkIndex(index, count);
if (isLatin1()) {
return (char)(value[index] & 0xff);
}
return StringUTF16.charAt(value, index);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.