在平時的開發中,我們可能會遇到需要拼接如下格式的字符串(至少我是遇到了很多次):
1,2,3,4,5,6,7,8,9,10,11,12,12,12,12,34,234,2134,1234,1324,1234,123
這個字符串的特點:多個數據之間通過某一個特殊符號分割。
以前我都是這樣想的,我相信很多的people也是這樣想的:
public class StringTest
{
public static void main(String[] args)
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i <= 10; i++)
{
//以下這個判斷對於有強迫症的人來說確實有點不爽,每次循環進來都要進行判斷以下,如果循環的次數很多呢,我們都會想到會不會對性能有影響呢?
if (i != 0)
{
sb.append(",");
}
sb.append(i);
}
System.out.println(sb.toString());
}
}
看到這裡,你平時的做法是不是也是這樣的,每一次循環中都存在這樣一個判斷,如果是回答是肯定的,那麼你就有必要繼續往下看了,因為以上的方式確實不怎麼明智。(至少對於我這個強迫症&&追求完美的人來說,這樣的代碼讓我很不爽)。
在這裡不會有人要反駁的代碼,要我用"+"來拼接字符串吧,如果你真是這樣想的,Oh My God!!!
我在這裡提供兩種我知道的方式去解決這種現象問題:
方法一:首先取出集合的第一個元素,通過StringBuilder的構造方法,傳入第一個元素,這樣是不是後面的每一次循環就不需要判斷了啊?
public class StringTest
{
public static void main(String[] args)
{
StringBuilder sb = new StringBuilder("0");
for (int i = 1; i <= 10; i++)
{
sb.append(",");
sb.append(i);
}
System.out.println(sb.toString());
}
}
很多小伙伴想到了上面的方式是通過技巧(java api的掌握熟練程度)將第一個特殊的元素取出來,特殊處理,後面的是不是每一個元素都有規律了,都是以一個字符加上一個數據。想到這裡,你有沒有想到點其他的?
作為一個程序員我們就應該練就一身舉一反三的本領,上面的方式既然能夠將第一個元素作為特殊的數據單獨提取出來,那麼有沒有辦法將最後的一個數據也作為特殊數據單獨提取出來,前面的其他數據不是就有規律可循了嗎?
所以下面就引出了我的第二種解決辦法(《Java編程思想第四版》P286)
方式二:很多人都熟悉StringBuilder的append();方法,但是很多人卻不知道StringBuilder的delete(int startPost,int endPost);如果你有舉一反三的學習習慣,那麼很容易就會掌握到這個api接口。其實在java的api中很多都是相對的,通過這種方式去學習,很快你就會發現自己知道的就很多。
public class StringTest
{
public static void main(String[] args)
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i <= 10; i++)
{
sb.append(i);
sb.append(",");
}
sb.delete(sb.length() - 1, sb.length());//這裡就看你知不知道這個api接口了
System.out.println(sb.toString());
}
}
以上只是我針對這一個小的知識點的技巧告訴大家,在學習中應該多學會舉一反三,掌握學習方法是你學好編程的一條捷徑。歡迎大家有更好的學習方法,學習技巧,知識點技巧與我共同討論與分享。