日志标签:函数

C#不区分大小写的字符串替换(Replace)函数

时间:2013年09月14日作者:小侃评论次数:0

在.NET中,不调用C++/CLI,进行字符串替换有好几种方法:

1、最常用的,就是String实例.Replace(),但这个不能忽略大小写。

2、System.Text.Regex(Regular Expression正则表达式),大家都估计到它的效率不高,虽然它支持忽略大小写。

3、String.SubString()循环,查找要替换的子字符串的位置,截取,然后字符串相加,大家也估计到,数量少(在codeproject.com上曾有文章讨论过和StringBuilder的临届值是600次)的情况下会比StringBuilder快。

4、跟3一样,唯一区别就是字符累加用StringBuilder,数量少的情况下比字符累加要慢,但过了临届值就要快。

5、引用Microsoft VisualBasic RunTime(Microsoft.VisualBasic.DLL),里面有一个Strings.Replace,效率非常高,其原理就是:Split()再Join(),其中Split支持忽略大小写的秘诀就是调用了System.Globalization.CultureInfo,也就是所谓的国际化,其实要实现字符串的替换代码量不多,但要兼容各种语言(非编程语言,是交流语言),那就得多花几倍的代码了。

6、不想用VB运行库的朋友,可以用Reflector配合Denis Bauer’s Reflector.FileDisassembler把Microsoft.VisualBasic.DLL中的Strings的Replace和相关函数抽取出来(C#),然后修补一下就可以单独使用了(我这明显是吃饱了撑着,VB专家装配脑袋指出我这是浪费时间,因为本身Microsoft VisualBasic运行库就包括在.NET Framework中)。
实战

以下是测试代码:
static void Main(string[] args)
{
string segment = “中华aBc共和国”;
string source;
string pattern = “abc”;
string destination = “人民”;
string result = “”;
const long count = 1000;
StringBuilder pressure = new StringBuilder();
HiPerfTimer time;

for (int i = 0; i < count; i++)
{
pressure.Append(segment);
}
source = pressure.ToString();

//regexp
time = new HiPerfTimer();
time.Start();
for (int i = 0; i < count; i++)
{
result = Regex.Replace(source, pattern, destination, RegexOptions.IgnoreCase);
}
time.Stop();

Console.WriteLine(“regexp    =” + time.Duration + “:”);
//vb
time = new HiPerfTimer();
time.Start();
for (int i = 0; i < count; i++)
{
result = Strings.Replace(source, pattern, destination, 1, -1, CompareMethod.Text);
}
time.Stop();

Console.WriteLine(“vb        =” + time.Duration + “:”);
//vbReplace
time = new HiPerfTimer();
time.Start();
for (int i = 0; i < count; i++)
{
result = VBString.Replace(source, pattern, destination, 1, -1, StringCompareMethod.Text);
}
time.Stop();

Console.WriteLine(“vbReplace =” + time.Duration + “:” + result);
//substring
time = new HiPerfTimer();
time.Start();
for (int i = 0; i < count; i++)
{
result = StringHelper.ReplaceText(source, pattern, destination, StringHelper.CompareMethods.Text);
}
time.Stop();

Console.WriteLine(“substring =” + time.Duration + “:”);
//substring with stringbuilder
time = new HiPerfTimer();
time.Start();
for (int i = 0; i < count; i++)
{
result = StringHelper.ReplaceTextB(source, pattern, destination, StringHelper.CompareMethods.Text);
}
time.Stop();

Console.WriteLine(“substringB=” + time.Duration + “:”);
Console.ReadLine();
}

说明

这个代码演示了上述几种方法:要把字符串”中华aBc共和国”中的”abc”替换为”人民”,注意:源子字符串是”aBc”,要替换的是”abc”,这里目的是要测试不区分大小写。

为了测试效率,我特意先把测试字符串累加1000次,然后循环测试1000次。
结果

以下是测试结果:
regexp      =1.38308285017339 //这是正则表达式,第3快;
vb            =0.525978828344589 //这是引用Microsoft VisualBasic RunTime的,次快;
vbReplace=0.522997341400086 //这就是用reflector改为C#的,最快;
substring  =21.8573638474698 //这是string.substring +,最慢
substringB=14.6346693500287 //这是string.substring StringBuilder,次慢,这里凸现了StringBuilder的速度;

这里仅仅是多次测试中的一次,我没有弄平均,大概数字吧,到底是vb快还是reflector的c#快,差不多…

是否应该使用Microsoft VisualBasic RunTime就见仁见智了。

PHP的GD库函数一览

时间:2011年12月17日作者:小侃评论次数:0

PHP的GD库函数一览

GetImageSize

作用:取得图片的大小[即长与宽]

用法:array GetImageSize(string filename, array [imageinfo]);

ImageArc

作用:画弧线

用法:int ImageArc(int im, int cx, int cy, int w, int h, int s, int e, int col);

ImageChar

作用:写出横向字符

用法:int ImageChar(int im, int font, int x, int y, string c, int col);

ImageCharUp

作用:写出竖式字符

用法:int ImageCharup(int im, int font, int x, int y, string c, int col);

ImageColorAllocate

作用:匹配颜色

用法:int ImageColorAllocate(int im, int red, int green, int blue);

ImageColorTransparent

作用:指定透明背景色

用法:int ImageColorTransparent(int im, int [col]);

ImageCopyResized

作用:复制新图并调整大小

用法:int ImageCopyResized(int dst_im, int src_im, int dstX, int dstY, int srcX, int srcY, int dstW, int d** srcW, int srcH);

ImageCreate

作用:建立新图

用法:int ImageCreate(int x_size, int y_size);

ImageDashedLine

作用:绘虚线

用法:int ImageDashedLine(int im, int x1, int y1, int x2, int y2, int col);

ImageDestroy

作用:结束图形

用法解释:int ImageDestroy(int im);

ImageFill

作用:图形着色

用法:int ImageFill(int im, int x, int y, int col);

ImageFilledPolygon

作用:多边形区域着色

用法:int ImageFilledPolygon(int im, array points, int num_points, int col);

ImageFilledRectangle

作用:矩形区域着色

用法:int ImageFilledRectangle(int im, int x1, int y1, int x2, int y2, int col);

ImageFillToBorder

作用:指定颜色区域内着色

用法:int ImageFillToBorder(int im, int x, int y, int border, int col);

ImageFontHeight

作用:取得字型的高度

用法:int ImageFontHeight(int font);

ImageFontWidth

作用:取得字型的宽度

用法:int ImageFontWidth(int font);

ImageInterlace

作用:使用交错式显示与否

用法:int ImageInterlace(int im, int [interlace]);

ImageLine

作用:绘实线

用法:int ImageLine(int im, int x1, int y1, int x2, int y2, int col);

ImageLoadFont

作用:载入点阵字型

用法:int ImageLoadFont(string file);

ImagePolygon

作用:绘多边形

用法:int ImagePolygon(int im, array points, int num_points, int col);

ImageRectangle

作用:绘矩形

用法:int ImageRectangle(int im, int x1, int y1, int x2, int y2, int col);

ImageSetPixel

作用:绘点

用法:int ImageSetPixel(int im, int x, int y, int col);

ImageString

作用:绘横式字符串

用法:int ImageString(int im, int font, int x, int y, string s, int col);

ImageStringUp

作用:绘直式字符串

用法:int ImageStringUp(int im, int font, int x, int y, string s, int col);

ImageSX

作用:取得图片的宽度

用法:int ImageSX(int im);

ImageSY

作用:取得图片的高度

用法:int ImageSY(int im);

ImageTTFBBox

作用:计算 TTF 文字所占区域

用法:array ImageTTFBBox(int size, int angle, string fontfile, string text);

ImageTTFText

作用:写 TTF 文字到图中

用法:array ImageTTFText(int im, int size, int angle, int x, int y, int col, string fontfile, string text);

ImageColorAt

作用:取得图中指定点颜色的索引值

用法:int ImageColorAt(int im, int x, int y);

ImageColorClosest

作用:计算色表中与指定颜色最接近者

用法:int ImageColorClosest(int im, int red, int green, int blue);

ImageColorExact

作用:计算色表上指定颜色索引值

用法:int ImageColorExact(int im, int red, int green, int blue);

ImageColorResolve

作用:计算色表上指定或最接近颜色的索引值

用法:int ImageColorResolve(int im, int red, int green, int blue);

ImageColorSet

作用:设定色表上指定索引的颜色

用法:boolean ImageColorSet(int im, int index, int red, int green, int blue);

ImageColorsForIndex

作用:取得色表上指定索引的颜色

用法:array ImageColorsForIndex(int im, int index);

ImageColorsTotal

作用:计算图的颜色数

用法:int ImageColorsTotal(int im);

ImagePSLoadFont

作用:载入 Posts.c.r.i.p.t 字型

用法:int ImagePSLoadFont(string filename);

ImagePSFreeFont

作用:卸下 Posts.c.r.i.p.t 字型

用法:void ImagePSFreeFont(int fontindex);

ImagePSEncodeFont

作用:Posts.c.r.i.p.t 字型转成向量字

用法:int ImagePSEncodeFont(string encodingfile);

ImagePSText

作用:写 Posts.c.r.i.p.t 文字到图中

用法:array ImagePSText(int image, string text, int font, int size, int foreground, int background, int x, int y, int space, int tightness, float angle, int antialias_steps);

ImagePSBBox

作用:计算 Posts.c.r.i.p.t 文字所占区域

用法: array ImagePSBBox(string text, int font, int size, int space, int width, float angle);

ImageCreateFromPNG

作用:取出 PNG 图型

用法:int ImageCreateFromPng(string filename);

ImagePNG

作用:建立 PNG 图型

用法:int ImagePng(int im, string [filename]);

ImageCreateFromGIF

作用:取出 GIF 图型

用法:int ImageCreateFromGif(string filename);

ImageGIF

作用:建立 GIF 图型

用法:int ImageGif(int im, string [filename]);

 

标签:,,分类:WEB程序开发