2010-07-13 8 views
6

Aus verschiedenen Gründen versuche ich, eine Zeichenfolge auf 2000 Leerzeichen festzulegen. Derzeit bin ich mit:Wie können Sie eine Zeichenfolge mit 2000 "Leerzeichen" erstellen?

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

Diese für Java 5 groß ist, sind jedoch einige der Entwickler in unserer Abteilung mit 1,4 und das funktioniert nicht.

Ich frage mich, gibt es andere Möglichkeiten, um das gleiche Ergebnis zu erzielen? Ich weiß, dass ich Dinge wie eine for-Schleife machen kann, indem ich einen Platz nach dem anderen hinzufüge, aber ich suche nach etwas Einfachem wie der Formatoption.

Für diejenigen, die daran interessiert sein können, warum ich das brauche, ist es, weil wir einen XML-Typ auf einem Datenobjekt haben, das beim Einfügen in die DB null ist. Es wird dann mit der XML-Zeichenfolge aktualisiert, die normalerweise etwa 2000 Zeichen groß ist. In Oracle, das diesen Bereich vorreserviert, kann die Zeilenmigration verhindert und somit die Leistung erhöht werden.

Danke!

+0

Fügen Sie ein einzelnes Leerzeichen in ein char (2000) -Feld in einer Datenbank ein und wählen Sie es dann wieder aus. – aehiilrs

+0

reserviert das wirklich den ganzen 2000 Block? – northpole

+0

Welche Oracle-Version und verwenden Sie XMLTYPE, wenn ja, was ist die Speicherklausel für den XMLTYPE? – oluies

Antwort

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

Ein StringBuffer und fügen Sie dann ein Leerzeichen 2000-mal in einer Schleife und toString() danach. Ich denke nicht, dass es "einfachere" Wege gibt, dies zu tun, was nicht unter den Deckeln geschieht.

Wenn Sie dies viel tun, würde es eine gute Bibliotheksfunktion machen.

+3

Sie können stattdessen einen StringBuilder verwenden, um den geringen Synchronisationsaufwand zu vermeiden, und Sie können den Builder auch mit der Zielgröße initialisieren, sodass keine Reallokation stattfindet. –

+0

StringBuilder ist nicht in Java 1.4 verfügbar, nach dem das ursprüngliche Poster fragt. –

0

StringUtils.repeat(" ", 2000) (von commons-lang)

Allerdings bin ich nicht sicher, ob eine solche Mikro-Optimierungen sollten mit den Kosten der Code vorgenommen werden, die eine 5 Linie Kommentar erfordern würde, zu erklären, warum das so ist erforderlich. Wenn Sie es tun - seien Sie sicher, einen ausführlichen Kommentar hinzuzufügen, andernfalls stellen Sie sich die Reaktion von denen vor, die Ihren Code lesen.

+0

ya, meine Funktion ist aus diesem Grund sehr gut dokumentiert – northpole

+5

@ downvoter - könnten Sie den Downvote erklären? Sie mögen Commons-lang nicht, oder meine Notiz über den Kommentar? – Bozho

1

Eine zufällige Funktion, die ich in meiner persönlichen Bibliothek gefunden:

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; 
    } 
} 

behauptet, es nicht der schnellstmögliche Weg ist Leerzeichen zu generieren, aber es :-)

arbeitet
+0

p.s. Ich glaube, das ist O (n) time so sollte eigentlich nicht so schlimm sein .... – mikera

+1

+1 wenn es ein Witz ist, ist es ziemlich lustig. –

+0

Sie sollten wirklich keine Strings mit '+' so erstellen. Verwenden Sie einen 'StringBuilder'. Der 'O (log N)' Schritt ist jedoch nett. – polygenelubricants

0

Wenn nichts anderes funktioniert:

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

warum nicht nur 'sb.toString()' –

1

Sie können lpad(' ',2000,' ') direkt in der Anweisung insert verwenden, um Oracle mitzuteilen, dass der gewünschte Wert erstellt werden soll.

In der Tat können Sie das fragliche Feld so einstellen, dass dies standardmäßig ist. Dadurch könnten Sie es nicht an mehreren Stellen ändern müssen (wenn Ihr Code explizit Null als Wert für das Feld sendet, wird dies der Fall sein) überschreiben Sie den Standard).

3

die einfachste Antwort: (blättern, um alle Codes zu sehen)

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

Hast du sie gezählt? –

+1

+1 Ich mag diese Lösung. Wenn wir zur Kompilierzeit wissen, was die Zeichenfolge ist, warum nicht hart codieren. (Allerdings ist wahrscheinlich eine andere Lösung mit der Datenbank selbst besser.) Ich zwickte die Lösung, um es nur ein wenig besser zu machen und Pascals Frage zu beantworten. Führen Sie es mit aktivierten Assertionen aus. String s = ... 2000 Leerzeichen ...; assert s.length() == 2000: "Konstante Zeichenfolge ist falsche Länge." ; – emory

Verwandte Themen