此文章仅为记录一问题所用

问题:字符串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;
   }
}
大概思路是这样,没有经过测试。

 

 

  1. public static void main(String[] args) {   
  2.         try {   
  3.             File f = new File("bigFile.txt");   
  4.             InputStreamReader read = new InputStreamReader(new FileInputStream(f));         
  5.             BufferedReader in = new BufferedReader(read);   
  6.             char x[] = {'0','1','2','3','4','5','6','7','8','9'};   
  7.             char b[] = new char[5000];   
  8.             int i=0;   
  9.             int countIn=0;//文件中包含0123456789的次数   
  10.             int countOut=0;//文件中包含A的次数   
  11.             while(in.read(b, 05000)!=-1){   
  12.                 for(int j=0;j<b.length;j++){   
  13.                     if(b[j]!=x[i]){   
  14.                         i=0;   
  15.                         countIn=0;   
  16.                         continue;   
  17.                     }else  
  18.                     {   
  19.                         i++;   
  20.                         i=(i>=10?(i%10):i);   
  21.                     }   
  22.                     if(x[i]=='9'){   
  23.                         if(countIn!=0&&countIn%10000==0)   
  24.                         {   
  25.                             countOut++;   
  26.                         }   
  27.                         countIn++;   
  28.                     }   
  29.                 }   
  30.             }   
  31.             in.close();   
  32.                
  33.             System.out.println("文件中包含A的次数="+countOut);   
  34.         } catch (Exception e) {   
  35.             e.printStackTrace();   
  36.         }   
  37.     }  

你可能感兴趣的:(F#,J#)