2010-07-13 24 views
6

由於各種原因,我試圖將字符串設置爲2000個空格。目前我正在使用:什麼方法可以用2000個「空格」創建一個字符串

String s = String.format("%1$-2000s"," "); 

這對Java 5很好,但是,我們部門的一些開發人員正在使用1.4,這是行不通的。

我想知道,是否有其他方法達到相同的結果?我知道我可以像for循環一樣添加一個空格,但我正在尋找一些簡單的格式選項。

對於那些可能會感興趣的人,爲什麼我需要這樣做,這是因爲我們在數據對象上插入數據庫時​​有一個XML類型爲空。然後用XML字符串進行更新,通常大小約爲2000個字符。在Oracle預保留這個空間可以防止行遷移,因此,提高性能。

謝謝!

+0

將單個空格插入數據庫的char(2000)字段中,然後將其選中。 – aehiilrs 2010-07-13 20:44:56

+0

這是否真的保留了整個2000塊? – northpole 2010-07-13 20:52:53

+0

哪個Oracle版本使用XMLTYPE,如果是的話,XMLTYPE的存儲子句是什麼? – oluies 2010-07-13 21:03:17

回答

18
char[] spacesArray = new char[2000]; 
Arrays.fill(spacesArray, ' '); 
String spaces = new String(spacesArray); 
1

一個StringBuffer,然後在循環中添加一個空格2000次,然後在toString()之後。我不認爲有任何「更簡單」的方法來做到這一點,但最終不會在封面上做這件事。

如果你這樣做了很多,它會成爲一個很好的庫函數。

+3

爲了避免小的同步開銷,您可以使用StringBuilder,並且還可以使用目標大小初始化構建器,以便不發生重定位。 – 2010-07-13 21:01:24

+0

StringBuilder在原始海報詢問的Java 1.4中不可用。 – 2010-07-13 21:08:22

0

StringUtils.repeat(" ", 2000)(從公共琅)

但是,我不知道是否有這樣的微優化應與代碼的成本,將需要5行註釋解釋作出這是爲什麼需要。如果你這樣做 - 一定要添加一個廣泛的評論,否則想象那些閱讀你的代碼的反應。

+0

雅,我的功能是非常有據可查的 – northpole 2010-07-13 20:56:42

+5

@downvoter - 你能解釋downvote?你不喜歡commons-lang,或者我對評論的評論? – Bozho 2010-07-13 21:08:10

1

隨機函數我在個人圖書館中發現:

public static String whiteSpace2(int l) { 
    if (l==0) return ""; 
    String half=whiteSpace2(l/2); 
    if ((l&1)!=0) { 
     return half+" "+half; 
    } else { 
     return half+half; 
    } 
} 

不聲稱它是生成空白最快的方式,但它工作:-)

+0

p.s.我相信這是O(n)的時間,所以實際上不應該那麼糟糕...... – mikera 2010-07-13 21:00:18

+1

+1如果它是一個笑話,它相當有趣。 – 2010-07-13 21:01:03

+0

你真的不應該像這樣用'+'來構建字符串。使用'StringBuilder'。儘管如此,'O(log N)'步驟還是不錯的。 – polygenelubricants 2010-07-13 21:01:26

0

如果沒有其他作品:

StringBuilder sb = new StringBuilder(); 
for(int i = 0; i < 2000; ++i) 
    sb.append(" "); 
String str = new String(sb); 
+7

爲什麼不只是'sb.toString()' – 2010-07-13 21:02:28

1

您可以直接在插入語句中使用lpad(' ',2000,' ')來告訴Oracle創建所需的值。

事實上,您可以設置有問題的字段將其設置爲默認值,這可能會阻止您需要在多個位置進行更改(如果您的代碼顯式發送空值作爲字段的值,那將會覆蓋默認值)。

3

最簡單的答案:(滾動看到所有的代碼)

String s = "                                                                                                                                                                                                                          "; // 2000 spaces 
+0

您是否指望它們? – 2010-07-13 23:27:44

+1

+1我喜歡這個解決方案。如果我們在編譯時知道字符串是什麼,爲什麼不用硬編碼呢。 (但是,可能涉及數據庫本身的另一種解決方案可能更好。) 我調整了解決方案,使其更好一些,並回答Pascal的問題。在啓用斷言的情況下運行它。 String s = ... 2000 spaces ...; assert s.length()== 2000:「常量字符串長度錯誤。」 ; – emory 2010-07-14 02:05:01

相關問題