当前位置: 首页 > 知识库问答 >
问题:

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

郑承恩
2023-03-14

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

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

例如,字符串:aaaaaaaa。。。多达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. 错误:找不到适用于charAt(BigInteger)c=s.charAt(Char\u计数器)的方法

共有1个答案

夏侯野
2023-03-14

<代码>java。lang.String不适用于非常大的字符串BigInteger不适合索引大于2^31的字符串-使用长型。

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

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

甚至<代码>java。nio使用int索引其缓冲区(当前)。

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

 类似资料:
  • 本文向大家介绍Java程序访问字符串字符,包括了Java程序访问字符串字符的使用技巧和注意事项,需要的朋友参考一下 要在Java中访问字符串的字符,请使用方法。该位置将作为参数添加。 假设我们有以下字符串- 让我们使用method在第4个位置找到字符。 以下是最后一个示例。 示例 输出结果

  • 问题内容: 我正在尝试使用字符串数组从XML获取资源,因为它当前处于循环中。 谁能建议我该怎么做? 为了清楚起见,资源名称与数组字符串名称相同。 到目前为止,我已经尝试过: 问题答案: 我没有误会你 是你所需要的

  • 键盘输入 电脑的智能,一种体现就是可以接受用户通过键盘输入的内容。 通过Python能不能实现这个简单的功能呢?当然能,要不然Python如何横行天下呀。 不过在写这个功能前,要了解函数: Python 2:raw_input() Python 3: input() 这是Python的内建函数(built-in function)。关于内建函数,可以分别通过下面的链接查看: Python 2的内建

  • 在大多数的情况下,API所支持模式匹配的基本形式是匹配字符串,如果正则表达式是foo,输入的字符串也是 foo,这个匹配将会是成功的,因为这两个字符串是相同的。试着用测试用具来测试一下: Enter your regex: foo Enter input string to search: foo I found the text "foo" starting at index 0 and end

  • 问题内容: 这是我查询的结果,但顺序不正确。我想按最后2个字符排序。结果应为:下面。 我的查询: 第二:sqlfiddle 问题答案: 试试这个: 检查 SQL FIDDLE DEMO 输出

  • 对性能是否有影响? 不同Java版本的行为是否有差异?