...
StringBuilder 是为了增加效率,,,
在 .NET String 是恒等的, 也就是更改不了的,
String 的 s+ 实际上并非是同一个 String 对象...
而是另外创建了一个 String 对象, StringBuilder 是为了增加效率,
使用一个 对象 对字符串进行操作...我不明白 你这个 StringBuilder 有什么实质意义
StringBuilder 是为了增加效率,,,
在 .NET String 是恒等的, 也就是更改不了的,
String 的 s+ 实际上并非是同一个 String 对象...
而是另外创建了一个 String 对象, StringBuilder 是为了增加效率,
使用一个 对象 对字符串进行操作...我不明白 你这个 StringBuilder 有什么实质意义
是为了增加效率 :)你将上面代码中的i改做长一点点的字符串,然后再试试看效率如何
假设你用javascript做服务端开发,需要输出一些表格数据,我认为我上面的方法比较清晰,且运行效率和工作效率都有提高,从字面上就可以看出意思来,这也是我加了个add方法的原因,使之从字面上更能达意,不看上面对象的定义也能知道这里的td.add的意思我上面有提到……来创建可修改的字符串序列……,换个角度,也有你说的String对象……也就是更改不了的……的意思。从另外一个角度讲,我这里提及.net等只是个引子,如果有错误的话,我坦然接受,毕竟我在.net区一贴都没发过,呵呵。欢迎继续拍砖~~~
var st = new Date, et, s = new Array, i;
for (i = 0 ; i < 10000 ; i ++) s[s.length] = i;
document.write(s.join(""));
s.length = 0;
et = new Date;
document.write("<br />的时间为" + (et - st) + "毫秒");
这样会快好多的说。。
改成这样也会快一些。。
被吹走
楼主是否真的清除StringBuffer类的作用?正如 btbtd(點點點...)(求职中, 联系:13435580019, 邱) 所说,人家.Net Java存在这个类名字刚好一样,或者Mfc的CString,Delphi的TString,都是为了“开发”效率!因为string 在计算机里面都是用ASCII码或者Unicode形式占内存空间的阿,人家封装一个StringBuffer是为了当处理“字符串”长度已发生变化的时候能够自动自动申请或者释放宝贵的内存的功能阿。您这个为的是什么啊,我怎么感觉既降低了开发效率,有降低了执行效率呢?JS 的String 对象原型已经是封装成了这样的功能,继续在JS的脚本层面上作这类封装不就是“画蛇添足”么?很可笑的想法啊,如果仅仅是出于研究好奇,无妨,但是还含着“提高效率”,我就觉得无知了。给你一个我自己实现的的String类,也就是你说的StringBuffer类,.Net我不会,去掉了大部分功能,只保留了和你那个相同功能的地方,真正的学习一下吧。
class MyString
{
static const char *s_pNullStr;
protected:
char *m_pData;
int m_Length;
int m_BufSize;
void newbuf(const char *m_pData,int len);
public:
MyString();
~MyString();
MyString(const char *lpvalue); void Empty(void);
void setValue(LPCTSTR str); void Insert(long Pos,char c); void operator = (const char *buf);
void operator += (const char *strg);
BOOL operator == (const char *str);
BOOL operator != (const char *str);
friend MyString operator + (const MyString & Str1, const MyString & Str2);
};#define EXPENTSIZE 8MyString::MyString()
{
m_pData=NULL;
m_BufSize=m_Length=0;
}MyString::MyString(const char *lpvalue)
{
m_pData=NULL;
m_BufSize=m_Length=0;
setValue(lpvalue);
}MyString::~MyString()
{
Empty();
}inline void MyString::Empty()
{
if (m_pData!=NULL) delete m_pData;
m_pData=NULL;
m_BufSize=m_Length=0;
}void MyString::newbuf(const char *lpvalue,int len)
{
if (len<0) len=0;
Empty();
m_BufSize=len+EXPENTSIZE;
m_pData = new char[m_BufSize+2];
if (lpvalue && len>0)
{
int cpyl=strlen(lpvalue);
if (cpyl>0) {
cpyl=min(cpyl,len);
memcpy(m_pData,lpvalue,cpyl);
m_pData[cpyl]=0;
m_Length=cpyl;
}
}
else {
*m_pData=0;
}
}void MyString::Insert(long Pos,char c)
{
if (Pos<0) return;
long maxLen=(Pos<m_Length)?(m_Length+1):(Pos+1);
if ( maxLen>=m_BufSize)
{
char *lpold=m_pData;
m_pData=NULL;
newbuf(lpold,maxLen+1);
if (lpold) delete []lpold;
}
if (Pos<m_Length) {
memmove(m_pData+Pos+1,m_pData+Pos,m_Length-Pos+1);
}
*(m_pData+Pos)=c;
m_Length+=1;//strlen(m_pData);
*(m_pData+m_Length)=0;
}void MyString::operator = (const char *lpvalue)
{
setValue(lpvalue);
}void MyString::operator += (const char *strg)
{
Insert(m_Length,strg);
}MyString operator + (const MyString & Str1, const MyString & Str2)
{
MyString TempStr(Str1);
TempStr+=Str2;
return TempStr;
}BOOL MyString::operator == (const char *str)
{
if (m_pData==NULL || str==NULL || m_Length<1) return FALSE;
return (strcmp(m_pData,str)==0);
}BOOL MyString::operator != (const char *str)
{
return !(*this==str);
}void MyString::setValue(LPCTSTR lpvalue)
{
Empty();
if (lpvalue==NULL) return;
newbuf(lpvalue,strlen(lpvalue));
}实现了你的基本功能.注意#define EXPENTSIZE 8 这行,这才是为了提高效率做的事情,也是所谓字符串缓冲区(察看一下MSDN你就明白了http://msdn2.microsoft.com/zh-cn/library/system.text.stringbuilder(VS.80).aspx),如果你认为现在流行的计算机配置都是1G ram,那么你大可把它设置成64,不是每一次字符串变化都需要重新申请内存的,那很慢的。每次看到JS里面某些人这这些毫无意义,并且本身根本不了解JS或者程序仅仅是扛着几颗五角星大喊特喊提高效率说一些“人家都听不明白的专用词”糊弄不懂得人,我都觉得可笑。
javascript的string也是非可变类,你搞清了没有
你认为n个字符串用加号连起来和使用join这个内嵌函数连起来这两种方法会具有相同的效率么?
楼主连试验的结果都有,真搞不清你们为什么要说效率没有提高?
一群纸上谈兵的家伙。。
本身这个想法就很有特色,尤其是对javascript这种有时候需要大量拼接字符串的脚本语言
还有你那个MyString的+号运算的效率不好
完全可以先分好缓冲区,再拷贝字符串,没必要先生成字符串,再伸缩缓冲区拷入另一个字符串
不能原地工作的操作在这种类里面最好不要建议用户使用
也不是想骂人,就是发泄一把。好多年没来过这里了,跟一个以前的同事聊起csdn,于是回来看看。在这里待了一年时间呢。
来了没多久就看到很多很无聊的东西,于是很感慨,怀念当年“孟子张”“秋水无痕”的年代。
那个时候好像没有太多这种东西,大多都是在想办法解决一些很实用的问题。
回来看看,好像认识的只有梅花雨了,其他的好像都不在了。
这个论坛现在有人问的问题让人哭笑不得
讨论一下这些问题还让人有点眼前一亮的感觉
我认为,能解决问题的方法就是好方法