首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

谁帮忙把这一小段java代码翻译成delphi

2013-09-17 
哪位高手帮忙把这一小段java代码翻译成delphiprivate String getFileID(String fileid,double seed){Strin

哪位高手帮忙把这一小段java代码翻译成delphi
private String getFileID(String fileid,double seed){  
  String mixed = getFileIDMixString(seed);  
  String[] ids= fileid.split("\\*");  
  StringBuilder realId = new StringBuilder();  
  int idx;  
  for (int i=0; i< ids.length; i++){  
    idx = Integer.parseInt(ids[i]);  
    realId.append(mixed.charAt(idx));  
  }  
  return realId.toString();  
}  
  
private String getFileIDMixString(double seed){  
  StringBuilder mixed = new StringBuilder();  
  StringBuilder source = new StringBuilder(  
    "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/\\:._-1234567890");  
  int index, len = source.length();  
  for (int i=0; i< len;++i){  
    seed = (seed * 211 + 30031) % 65536;  
    index = (int)Math.floor(seed/65536 * source.length());  
    mixed.append(source.charAt(index));  
    source.deleteCharAt(index);  
  }  
  return mixed.toString();  



function getFileIDMixString(seed: Double): AnsiString;
var
  source: AnsiString;
  i, index, len: Integer;
begin
  Result := '';
  // 源字串 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/\\:._-1234567890
  source := //  一个 \ 在java里是转移符,下面字串的 \\ 可能需要改为 \
  'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/\:._-1234567890';


  index := Length(source);
  len := index;

  for i := 0 to len - 1 do
  begin
    seed := Floor(seed * 211 + 30031) mod 65535;
    index := Floor(seed) div 65536 * Length(source);
    Result := Result + source[index + 1];
    Delete(source, index, 1);
  end;

end;

function getFileID(fileid: AnsiString; seed: Double): AnsiString;
var
  mixed: AnsiString;
  ids: TStringList;
  i, idx: Integer;
begin
  Result := '';
  mixed := getFileIDMixString(seed);
  ids := TStringList.Create;
  // string.split("\\*"); 的 \\* 应该是匹配 *字符?
  ids.Delimiter := '*'; // 若如此,那么就用 * 来做字符串分隔的符号
  ids.Text := fileid;

  // java string 索引从0开始,delphi 从1开始
  for i := 0 to ids.Count - 1 do
  begin
    if (TryStrToInt(ids[i], idx)) then
      Result := Result + mixed[idx + 1];
  end;
  ids.Free;
end;

热点排行