繁体   English   中英

如何使 charAt 方法与 java 中的 arrays 一起使用?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM