有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何使charAt方法在java中与数组一起工作?

有人能帮我解决这个问题吗?4.我必须使方法更有效,但我不知道该怎么做

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) 个答案

  1. # 1 楼答案

    试试这个:

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

    因为您有一个数组,并且希望返回特定数组中的字符。在您的问题中,您没有返回特定的索引值

  2. # 2 楼答案

    为了更好地理解字符集,可以参考下面的代码,这些代码来自AbstractStringBuilder

     @Override
    public char charAt(int index) {
        checkIndex(index, count);
        if (isLatin1()) {
            return (char)(value[index] & 0xff);
        }
        return StringUTF16.charAt(value, index);
    }
    
  3. # 3 楼答案

    使用[]访问数组中的元素。但是不要忘记抛出必需的异常,就像在CharSequence文档中声明的那样(如果访问数组中不正确的元素,另一种类型的异常将是thorwn)

    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());
        }
    }