访问超出Integer范围的String字符

时间:2016-09-20 13:53:16

标签: java string primitive-types

我有一个String/character序列正在无限重复...当然,字符将超出Integer的范围并开始落入Long的范围,因为用于访问String的字符的方法以及StringBuilder课程都需要int "index"我如何访问这些字符,例如Long long>Intger.MAX_VALUE。有没有办法覆盖这些方法,如charAt(int index),以便他们开始“接受”长参数,如果不是这样,我如何访问此索引处的字符,考虑使用String.toCharArray()转换为字符数组方法然后再次,数组长度只能达到Integer.MAX_VALUE。是否有method/constructor类型,我不知道哪种接受长参数?

1 个答案:

答案 0 :(得分:1)

你绝对不应该构造一个字符串并对其进行测量。

这是对你如何能够抽象事物的测试。我会给你一些你可能会学习的代码。你不应该复制+粘贴它有几个原因 - 包括我犯了一些错误的可能性。

这个想法是,简单地计算信息,这是可能的,因为我们有一个简单的重复模式。

class RepeatedString {
    private String s;
    public RepeatedString(String s) {this.s = s;}

    public char charAt(long i) {
      return s.charAt((int)(i % s.length()));
    }

    public long count(char c, long i) {
      long n = 0;
      // how many complete repetitions?
      {
        long r = i / s.length();
        if (r > 0) {
          // count c in s
          for (int j = 0 ; j < s.length() ; j++) n += s.charAt(j) == c ? 1 : 0;
          n *= r;
        }
      }
      // how many c in last repitition
      {
        long l = i % s.length();
        for (int j = 0 ; j < l ; j++) n += s.charAt(j) == c ? 1 : 0;
      }
      return n;
    }
}

class Kata {

  public static void main(String[] args) {
    RepeatedString s = new RepeatedString("bla");

    System.out.println(s.charAt(1)); // expected 'l'
    System.out.println(s.charAt(6)); // expected 'b'

    System.out.println(s.count('a', 19)); // expected 6
    System.out.println(s.count('a', 21)); // expected 7
  }

}