标题:StringBuffer问题
只看楼主
jqbbccn
Rank: 1
等 级:新手上路
帖 子:73
专家分:0
注 册:2006-10-17
 问题点数:0 回复次数:10 
StringBuffer问题

int i,j,p;
char dw[]={'1','2','3'};
StringBuffer dx=new StringBuffer("ldjkfhsjkf.as");
for(i=0;i<dx.length();i++)
{
if(dx.charAt(i)=='.')
{
p=i;
}
}
System.out.println("dx.length()="+dx.length());
for(i=p+1,j=0;i<dx.length();i++,j++)
{
System.out.print("i="+i+"j="+j);
System.out.print(dx.charAt(i));
System.out.println(dw[j]);
//dx.insert(i,dw[j]); 这句是想把'1','2'插到'.'后面的a和s后面,可是加了这句就下标越界,搞不懂!
}

[此贴子已经被作者于2007-6-5 13:36:30编辑过]

搜索更多相关主题的帖子: StringBuffer 
2007-06-05 13:35
jqbbccn
Rank: 1
等 级:新手上路
帖 子:73
专家分:0
注 册:2006-10-17
得分:0 
同志们帮忙试一下嘛- -

2007-06-05 14:05
zhufeifei
Rank: 1
等 级:新手上路
威 望:2
帖 子:402
专家分:0
注 册:2006-8-11
得分:0 
以下是引用jqbbccn在2007-6-5 13:35:43的发言:

int i,j,p;
char dw[]={'1','2','3'};
StringBuffer dx=new StringBuffer("ldjkfhsjkf.as");
for(i=0;i<dx.length();i++)
{
if(dx.charAt(i)=='.')
{
p=i;
}
}
System.out.println("dx.length()="+dx.length());
for(i=p+1,j=0;i<dx.length();i++,j++)
{
System.out.print("i="+i+"j="+j);
System.out.print(dx.charAt(i));
System.out.println(dw[j]);
//dx.insert(i,dw[j]); 这句是想把'1','2'插到'.'后面的a和s后面,可是加了这句就下标越界,搞不懂!
StringBuffer的insert(int i,char[] str)方法是把str字符数组元素插入i指定的字符串中,故插入以后出现StringBuffer.length变长了.导到dw数组越界的?
}



在不断的拼搏与进取中,定能创造一片天地!
2007-06-05 14:26
jqbbccn
Rank: 1
等 级:新手上路
帖 子:73
专家分:0
注 册:2006-10-17
得分:0 
dx.length()=13
i=11j=0a1
i=12j=1a2
i=13j=2a3
i=14j=3aException in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
at aa.test.main(test.java:24)

这是eclipse的错误提示
i=11j=0a1
i=12j=1a2
这2条是对的
为什么它会继续往下做呢,郁闷

2007-06-05 14:53
jqbbccn
Rank: 1
等 级:新手上路
帖 子:73
专家分:0
注 册:2006-10-17
得分:0 

如果在加个条件就对了for(i=p+1,j=0;i<dx.length()&&j<dx.length()-p;i++,j++)

好怪!!


2007-06-05 14:57
zhufeifei
Rank: 1
等 级:新手上路
威 望:2
帖 子:402
专家分:0
注 册:2006-8-11
得分:0 
不错啊,因为第一次循环,i=11,j=0,后面用dx.insert()后,dx字符串加了d[0]即为:ldjkfhsjkf.1asfor,看到没,a前面多了个1,现在长度就是14了,后面也这样……(i=p+1,j=0;i<dx.length()&&j<dx.length()-p;i++,j++)就限制了循环下去数组越界!

在不断的拼搏与进取中,定能创造一片天地!
2007-06-05 15:14
jqbbccn
Rank: 1
等 级:新手上路
帖 子:73
专家分:0
注 册:2006-10-17
得分:0 
谢谢,不过这样改好后还是达不到,预期效果
for(i=p+2,j=0;i<dx.length()&&j<2;i++,j++)
{
// System.out.print("i="+i+"j="+j);
// System.out.print(dx.charAt(i));

dx.insert(i,dw[j]); // 这句是想把'1','2'插到'.'后面的a和s后面,可是加了这句就下标越界,搞不懂!
}
System.out.println(dx);

结果:dx.length()=13
ldjkfhsjkf.a12s
而不是ldjkfhsjkf.a1s2


2007-06-05 15:20
jqbbccn
Rank: 1
等 级:新手上路
帖 子:73
专家分:0
注 册:2006-10-17
得分:0 

再想想~~
...
public static void main(String[] args) {

int i,j;
int p=0;
char dw[]={'1','2','3'};
int lenr,lenh=0;
StringBuffer dx=new StringBuffer("kf.asf");
lenr=dx.length();
for(i=0;i<lenr;i++)
{
if(dx.charAt(i)=='.')
{
p=i;
lenh=lenr-p-1;
}
}
dx.append(" ");
System.out.println("dx.length()="+dx.length());
for(i=p+2,j=0;i<dx.length()&&j<lenh;i+=2,j++)
{
dx.insert(i,dw[j]);
}
System.out.println(dx);
}
结果:kf.a1s2f3
搞定啦,谢谢大家

[此贴子已经被作者于2007-6-5 15:39:20编辑过]


2007-06-05 15:23
jqbbccn
Rank: 1
等 级:新手上路
帖 子:73
专家分:0
注 册:2006-10-17
得分:0 
再次感谢zhufeifei,,MUA~~

2007-06-05 15:39
zhufeifei
Rank: 1
等 级:新手上路
威 望:2
帖 子:402
专家分:0
注 册:2006-8-11
得分:0 
如果想在as后面直接加1,2的话,直接用StringBuffer.append(String str)就行了!呵呵,不知道你想要什么结果?

在不断的拼搏与进取中,定能创造一片天地!
2007-06-05 15:44



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-145067-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.097326 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved