问题:字符串A是01234567890123456789……0123456789,循环一万次,现问10G大小的文件含字符串A的次数,内存不能超过10k
//总的匹配结果
int match = 0;
//当 matchCount == 100000为找到一个字符A
int matchCount = 0;
char curChar = -1;
char preChar = -1;
while((curChar = getNextCharFromFile()) != EOF)
{
if (matchCount== 0 && curChar == 0x30) {
matchCount =1;
preChar = curChar;
continue;}
else if ((curChar - preChar) ==1)//此处省略,如果结果为负数则加10
{matchCount++; preChar = curChar; continue;}
else {
if (matchCount >= 100000){
//相当于正则匹配的贪婪
match = match + (matchCount - 100000)/10;
}
preChar = curChar;
matchCount = 0;
if(curChar == 0x30) matchCount = 1;
}
}
大概思路是这样,没有经过测试。
- public static void main(String[] args) {
- try {
- File f = new File("bigFile.txt");
- InputStreamReader read = new InputStreamReader(new FileInputStream(f));
- BufferedReader in = new BufferedReader(read);
- char x[] = {'0','1','2','3','4','5','6','7','8','9'};
- char b[] = new char[5000];
- int i=0;
- int countIn=0;//文件中包含0123456789的次数
- int countOut=0;//文件中包含A的次数
- while(in.read(b, 0, 5000)!=-1){
- for(int j=0;j<b.length;j++){
- if(b[j]!=x[i]){
- i=0;
- countIn=0;
- continue;
- }else
- {
- i++;
- i=(i>=10?(i%10):i);
- }
- if(x[i]=='9'){
- if(countIn!=0&&countIn%10000==0)
- {
- countOut++;
- }
- countIn++;
- }
- }
- }
- in.close();
- System.out.println("文件中包含A的次数="+countOut);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }