用顿号将若干个字符串分隔开

错误做法:

 String[] words
= { " a " , " b " , " c " } ;
 String word
= "" ;

 
for ( int  i = 0 ;i < words.length;i ++ )
 
{
     word
+= words[i]+ " " ;
 }


 正确做法:

 String[] words
= { " a " , " b " , " c " } ;
 String word
= "" ;

 
for ( int  i = 0 ;i < words.length;i ++ )
 
{
     
if  ( ! word.equals( "" )) 
     word
+= " " ;
     word
+= words[i];
 }




posted on 2007-02-27 08:20 我为J狂 阅读(2719) 评论(15)  编辑  收藏 所属分类: Java算法

评论

# re: 用顿号将若干个字符串分隔开 2007-02-27 08:33 easyrun

if ( ! word.equals( "" ))
最好改为!"".equals(word)
因为如果word在前的话很容易引起nullPoint异常  回复  更多评论   

# re: 用顿号将若干个字符串分隔开 2007-02-27 08:44 我为J狂

真是金玉良言,我会在以后的开发过程中加以改进的。  回复  更多评论   

# re: 用顿号将若干个字符串分隔开 2007-02-27 09:33 永恒之光

其实要认省点代码。这样就不用比较NULL了。
for ( int i = 0 ;i < words.length-1;i ++ )  回复  更多评论   

# re: 用顿号将若干个字符串分隔开 2007-02-27 09:37 Lingo

别在循环里用+号哦  回复  更多评论   

# re: 用顿号将若干个字符串分隔开 2007-02-27 10:02 我为J狂

“永恒之光”的方法真妙!以上的程序改为:
String[] words = { " a " , " b " , " c " } ;
String word = "" ;
int i=0;
for ( i = 0 ;i < words.length-1;i ++ )
{
word+=words[i]+" 、 ";
}
word +=words[i];
不但节省了代码,而且不用比较NULL了。

对于 Lingo提出的问题“别在循环里用+号”,我不知道其中的原因,请Lingo解释一下,谢谢。  回复  更多评论   

# re: 用顿号将若干个字符串分隔开 2007-02-27 10:56 hcom

不用+ 的话,就不要用String了,只好用StringBuffer咯

  回复  更多评论   

# re: 用顿号将若干个字符串分隔开 2007-02-27 11:12 我为J狂

是不是将程序改成这样?
String[] words = { " a " , " b " , " c " } ;
StringBuffer word =new StringBuffer("");
int i=0;
for ( i = 0 ;i < words.length-1;i ++ )
{
word=word.append(new StringBuffer(words[i]).append(" 、 "));
}
word=word.append(words[i]);
如果这样写,代码的可读性降低,很不好理解。
我想Lingo提出“别在循环里用+号”另有涵义。  回复  更多评论   

# re: 用顿号将若干个字符串分隔开 2007-02-27 12:00 hcom

String[] words = { " a ", " b ", " c " };
StringBuffer word = new StringBuffer("");
int i = 0;
for (i = 0; i < words.length - 1; i++) {
word.append(words[i]).append("、");
}
word.append(words[i]);


这样不可以吗??  回复  更多评论   

# re: 用顿号将若干个字符串分隔开 2007-02-27 12:27 我为J狂

呵呵,是我将程序写复杂了,见笑了。  回复  更多评论   

# re: 用顿号将若干个字符串分隔开 2007-03-05 23:09 dreamstone

@我为J狂
Equals的时候尽量用"内容"开头,这样不用判断空

正如Lingo说的不要在循环中使用字符串的+,因为字符串是非可变的对象,使用+基本上等于new StringBuffer() apend() apend() toString。比直接使用StringBuffer多了一次new,如果写在循环中会很大程度降低效率。

如果是Jdk1.5可以在StringBuilder和StringBuffer之间选择一下,原因可以看看这里http://www.blogjava.net/dreamstone/archive/2006/10/17/75608.html  回复  更多评论   

# re: 用顿号将若干个字符串分隔开 2007-03-05 23:13 dreamstone

@我为J狂
int i = 0;
for (i = 0; i < words.length - 1; i++) {
word.append(words[i]).append("、");
}
这种写法不太好,呵呵。因为容易犯复制粘铁错误,如出现
等同于for 循环的迭代好于while循环
这样比较好点。
for (int i = 0; i < words.length - 1; i++) {
word.append(words[i]).append("、");
}
  回复  更多评论   

# re: 用顿号将若干个字符串分隔开 2007-03-05 23:17 dreamstone

另外关于分割的情况,如果使用、分割有的时候会有些限制,比如用户恰好输入了、,这个时候需要转义,是挺麻烦的事情,有个解决方案是这样,可以使用用户不可能输入的字符来分割,例如(char)1 看上去就是个乱码,呵呵

你的表真有意思,刚才正好23:00,一顿响,吓了我一跳一以为中病毒了。  回复  更多评论   

# re: 用顿号将若干个字符串分隔开 2007-03-06 11:23 我为J狂

@dreamstone
写成您说的那样更改:
for (int i = 0; i < words.length - 1; i++) {
word.append(words[i]).append("、");
}

那么我最后一行的代码:word.append(words[i]);
其中的变量i就没有定义了,显然是不行的。

对于您提出的粘贴错误问题我能理解;我举例说明一下,
//代码1
for(Iterator it=list.iterator();it.hasNext();)
{
}
//代码2
Iterator it=list.iterator();
while(it.hasNext())
{
}
对于以上两段代码,代码1发生粘贴错误的几率要远远小于代码2。  回复  更多评论   

# re: 用顿号将若干个字符串分隔开 2007-03-09 09:35 slx

那就这么写吧
for (int i = 0; i < words.length; i++) {
if(i != 0){
world.append("、");
}
word.append(words[i]);
}
  回复  更多评论   

# re: 用顿号将若干个字符串分隔开 2007-03-09 18:01 我为J狂

@slx
哈哈,到目前为止,您的方法最棒!谢谢。  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问  
 
<2007年3月>
25262728123
45678910
11121314151617
18192021222324
25262728293031
1234567

导航

统计

常用链接

留言簿(11)

随笔分类(48)

文章分类(29)

常去逛逛

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜