JAVA超长字符串问题

请问各位大神。。。现在我有一个stringbuffer,保存了一个很长的数据(比int最大长度还大),那如何取出第一百万位的字符呢。。。别说charat,它的参数是int...还有substring,它的参数也是int。。。

对于这样的问题,通常可以分段处理,将其按照一定的长度分割,在需要找具体位数的时候,先找到该位数所在的段,在段中在进行查找。
比如,如果以1000为单位来分段的话,100万的数据会被分为1000段,当你查找987654位的时候,
就变成987654/1000=987余654,那么就是stringbuffer[986]里,从653开始取一位对吧?
当然,这种处理,如果要做运算等处理的话,就需要写分段运算的算法了。
当然,这只是抛砖引玉,真正实践时,需要写更快的算法,比如使用多重map表制作索引等方式
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-03-03
2种方案
1)字符串分段处理。当然这里面也有问题,如果abcd,bc被分到2个字符串里面,拿取也听不方便的。不过也不失为一个办法。

2)对于特定的内容,如果可以转化为xml,可以转化成xml,然后层层解析;取得所需要的内容。

觉得有点恐怖,怎么那么长的字符串拼接。通过tochararay那些都行不通的。数组承受不了那么多的元素。因为数组里面定义也是object[int len]的本回答被提问者采纳
第2个回答  2011-03-03
用toCharArray()方法;
首先将stringbuffer转成string类型,然后调用toCharArray(),把字符串转成字符数组;
比如:有StringBuffer stringbuffer,
String string = stringbuffer.toString();
char[] str = string.toCharArray();
Char char = str[1000000]; //第一百万个位子的字符
不知道可不可以这么长,估计应该没什么问题追问

您好,你这样的话,那如果我不知道是第多少位,而是遍历这个stringbuffer,找到一段“abc”(假设长度也超过Int上限),然后返回第几位呢。。。那用for循环long k=0;k<length;k++
str[k]也不对阿。。。

第3个回答  2011-03-07
我狂晕了,这么大字符串还不缓冲,你当内存是硬盘啊。
public class NewClass2 {

public static void main(String[] args) throws IOException {
FileWriter fileWriter = new FileWriter(new File("c:/test.txt"));
BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
for (int i = 0; i < 10000000; i++) {
bufferedWriter.write("12345678901234567890");
}
bufferedWriter.flush();
bufferedWriter.close();
FileReader fileReader = new FileReader(new File("c:/test.txt"));
BufferedReader bufferedReader = new BufferedReader(fileReader);
bufferedReader.skip(1000000l);
char[] bs = new char[1];
bufferedReader.read(bs);
System.out.println(bs[0]);
}
}
随你写,我这个是2亿个字符,文件有190M只要你愿意你把硬盘写爆都行,但是读取速度绝对让你没话说。 还有楼主注意拿完数据删除文件,不然真要爆硬盘了。
第4个回答  2011-03-03
1.stringbuffer 内置数据是 char[],长度用的是int类型,所以数据长度不可能超过int最大值
2.stringbuffer 装int最大长度个字符所需内存4G,java不支持这么大内存,windows下最大2G左右,linux下稍微大点,不超过3G

所有你的问题是不会出现的
你可以用 stringbuffer.apend试下,最先报的错是内存溢出
相似回答