gpt4 book ai didi

java - 访问字符串中超过 2^31 个字符的字符

转载 作者:行者123 更新时间:2023-12-02 10:31:56 25 4
gpt4 key购买 nike

我一直在尝试访问具有 1 万亿个字符的字符串中的字符。我使用 BigInteger 从字符串中获取索引号,并使用 charAt 方法从字符串中访问字符。

我想做的是计算给定字符串中特定字符的出现次数。

例如,字符串:aaaaaaa...最多 1 万亿个字符的“a”。然后我将计算字符“a”(要计数的给定字符)的出现次数

如何访问超过 2,147,483,647 (2^31) 的字符串中的字符?还有其他方法可以做到这一点吗?

代码片段:

BigInteger String_Length = BigInteger.valueOf(n); //1,000,000,000,000
BigInteger Occurence = BigInteger.valueOf(0);

StringBuilder sb = new StringBuilder();
char c;

for(BigInteger First_Counter = BigInteger.valueOf(0); First_Counter.compareTo(String_Length) <= 0; First_Counter = First_Counter.add(BigInteger.ONE)){
for(BigInteger Char_Counter = BigInteger.valueOf(0); Char_Counter.compareTo(String_Length) <= 0; Char_Counter = Char_Counter.add(BigInteger.ONE)){
c = s.charAt(Char_Counter);
c = sb.append(c);
}
}

for(BigInteger Second_Counter = BigInteger.valueOf(0); Second_Counter.compareTo(String_Length) <= 0; Second_Counter = Second_Counter.add(BigInteger.ONE)){
c = sb.charAt(Second_Counter);

if(c == 'a')
Occurence = Occurence.add(BigInteger.ONE);

}

错误

  1. error: no suitable method found for charAt(BigInteger) c = s.charAt(Char_Counter);
  2. method CharSequence.charAt(int) is not applicable (argument mismatch; BigInteger cannot be converted to int)
  3. error: incompatible types: StringBuilder cannot be converted to char c = sb.append(c);

最佳答案

java.lang.String 不适合非常大的字符串。 BigInteger 不适用于索引大于 2^31 的字符串 - 使用 long

构造字符串需要内存中已有的数据,因此需要两份。更多缓冲区通常会在构建之前调整大小,这至少需要实际数据大小的两倍加上缓冲区中的任何额外容量。

此外,String 字符的内部存储(通常为 char,但也有其他可用)可能不适合您的数据。另外,您是否想要创建一个 BigInteger 对象以及内部数组来访问每个索引。

甚至java.nio也使用int来索引其缓冲区(当前)。

因此,您需要编写自己的 BigString,由 long 索引,并由数组组成的数组支持。或者更可能是内存映射 NIO 缓冲区的数组(或 List)。

关于java - 访问字符串中超过 2^31 个字符的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53569692/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com