访问超出 Integer 范围的 String 字符
Accessing characters of a String beyond the range of Integer
我有一个无限次重复的 String/character
序列...自然地,字符将超出 Integer 的范围并开始落入 Long 的范围,因为用于访问 String 和以及 StringBuilder
class 都需要一个 int "index"
我如何访问这些字符 ,Long long>Intger.MAX_VALUE
。有没有办法覆盖这些方法,例如 charAt(int index)
以便它们开始 "accepting " 长参数,如果不是这样,我如何访问该索引处的字符,考虑使用 [=15 转换为字符数组=] 方法,但话又说回来,数组长度最多只能达到 Integer.MAX_VALUE
。是否有我不知道的接受长参数的 method/constructor
类型?
你绝对不应该构造一个字符串并对其进行测量。
这是一项关于您抽象事物能力的测试。我会给你一些你可以学习的代码。你不应该复制粘贴它有几个原因 - 包括我做错的可能性。
我们的想法是,简单地计算信息,这是可能的,因为我们有一个简单的重复模式。
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
}
}
我有一个无限次重复的 String/character
序列...自然地,字符将超出 Integer 的范围并开始落入 Long 的范围,因为用于访问 String 和以及 StringBuilder
class 都需要一个 int "index"
我如何访问这些字符 ,Long long>Intger.MAX_VALUE
。有没有办法覆盖这些方法,例如 charAt(int index)
以便它们开始 "accepting " 长参数,如果不是这样,我如何访问该索引处的字符,考虑使用 [=15 转换为字符数组=] 方法,但话又说回来,数组长度最多只能达到 Integer.MAX_VALUE
。是否有我不知道的接受长参数的 method/constructor
类型?
你绝对不应该构造一个字符串并对其进行测量。
这是一项关于您抽象事物能力的测试。我会给你一些你可以学习的代码。你不应该复制粘贴它有几个原因 - 包括我做错的可能性。
我们的想法是,简单地计算信息,这是可能的,因为我们有一个简单的重复模式。
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
}
}