как заставить метод charAt работать с массивами в java? - PullRequest
0 голосов
/ 04 мая 2020

Может кто-нибудь помочь мне с этой проблемой? я должен заставить метод 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);
    }*

Ответы [ 3 ]

0 голосов
/ 04 мая 2020

Используйте [] для доступа к элементу в массиве. Но не забывайте о создании обязательного исключения, как это было объявлено в документации 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());
    }
}
0 голосов
/ 04 мая 2020

Для лучшего понимания о наборе символов см. Ниже код из AbstractStringBuilder

 @Override
public char charAt(int index) {
    checkIndex(index, count);
    if (isLatin1()) {
        return (char)(value[index] & 0xff);
    }
    return StringUTF16.charAt(value, index);
}
0 голосов
/ 04 мая 2020

Попробуйте это:

@Override
public char charAt(int i) {
    return (char) array[i];
}

Так как у вас есть массив и вы хотите вернуть символ в конкретном массиве. В вашем вопросе вы не возвращаете конкретное значение индекса.

...