简体   繁体   English

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

[英]how can I make charAt method work with arrays in java?

can someone help me with this problem?有人可以帮我解决这个问题吗? i have to make method charAt to work but i dont know how..我必须让方法 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);
    }*

Try this:尝试这个:

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

Since you have an array and want to return the character at a particular array.由于您有一个数组并且想要返回特定数组中的字符。 In your question you are not returning a particular index value.在您的问题中,您没有返回特定的索引值。

Use [] to access element in the array.使用[]访问数组中的元素。 But do not forget about throwing required exception, like it declared in CharSequence documentation (if you access not correct element in an array, another type of exception will be thorwn).但是不要忘记抛出所需的异常,就像在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());
    }
}

For better understanding about character set can be refer below code from AbstractStringBuilder为了更好地理解字符集,可以参考下面来自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