In String ab bestimmter stelle schreiben

zeja

Erfahrenes Mitglied
Ihr immer mit eurem Vektor... eine ArrayList ist wirklich 8-10 mal schneller.

Mach dir halt eine Methode die einen String bekommt und diesen bis zu einer bestimmten Stelle mit Leerzeichen auffüllt. Dann kannst du den Rest konkatenieren.

Also aus:
Hallo, 10
würde dann
Hallo__________
(_ stehen hier mal für Leerzeichen).

Dann weißt du genau das alles die richtige Länge hat und kannst es aneinander hängen.

Andernfalls müßte es wohl auch mit einem StringBuilder und einem insert gehen.
 

MScalli

Erfahrenes Mitglied
joop.. die einzige lösung ist es zeichenweise alles zu füllen..
die Strings sind dank MaskFormatter schon ok.. und für die Zahlenfelder hab ichs so gelöst
(nachkommastellen müssen immer stimmen und vorangehende leezeichen müssen Nullen sein.

Code:
		// ist es eine ganze Zahl oder sind Nachkommastellen vorhanden 
		if(str_nachkomma.equals("00")){
			for(int i = tf.getText().length(); i < Integer.parseInt(str_laenge); i++){
				str_return = "0" + str_return; 
			}
			return str_return;
		}else{
			// hier sind Nachkommastellen vorhanden UND es steht nichts drin
			if(tf.getText().length() == 0){
				for(int i = 0; i < Integer.parseInt(str_laenge) - Integer.parseInt(str_nachkomma) - 1; i++){
					str_return += "0"; 
				}
				str_return += ",";
				for(int i = 0; i < Integer.parseInt(str_nachkomma); i++){
					str_return += "0"; 
				}
				return str_return;
			}else{
				// Hier steht schon was drin. D.h. nachkommastellen passen schon. Es müssen nur die 0en vorangestellt werden
				for(int i = tf.getText().length(); i < Integer.parseInt(str_laenge); i++){
					str_return = "0" + str_return; 
				}
				return str_return;
			}	
		}

thx leutz
 

Anime-Otaku

Erfahrenes Mitglied
Wenn wir es schon von Performance haben....benutze lieber einen Stringbuffer (thread-sicher) oder einen Stringbuilder (nicht thread-safe). Da bei einem normalen String beim hinzufügen immer ein neuer String erstellt wird und das einfach nur verdammt langsam ist.
(mit append anhängen und mit insert etwas einfügen)


Am Ende kannste dann mit einem toString den String dir holen.
 
Zuletzt bearbeitet:

NoComment

Grünschnabel
Moin,

ich würde Euch dringend raten anstatt Strings einfach hintereinander zu kleben besser eine Instanz von StringBuilder oder StringBuffer (abhängig von der verwendeten Java Version) zu verwenden. Dies hat die Vorteile:
a) schneller, da nicht ständig neue Instanzen erzeugt werden müssen (Java nutzt intern beim verketten ebenfalls diese Klasse, muss die Instanzen aber logischerweise jedesmal wieder wegwerfen)
b) nicht so speicherhungrig

Ansonsten preferiere ich auch eine Methode, nach der art:
Code:
public StringBuilder concatinate (StringBuilder sb, CharSequence val, char fillChar, int fillLength) {
   int startlength = sb.length();

  sb.append(val);
  while (sb.length() < startlength + fillLength) {
    sb.append(fillChar);
  }
  //gegebenenfalls die Länge des Strings beschneiden (Wenn zu lang)
  sb.setLength(startlength + fillLength);

  return sb;
}

ACHTUNG: der code ist nicht getestet (nur mal schnell so ningeschrieben), daher denke ich werden da compilefehler enthalten sein, die sollten aber mit Hilfe des Compilers schnell auffindbar sein...

Gruß

NoComment
 

NoComment

Grünschnabel
@zeja

Moin,

Danke für Deinen Link! Sehr interessant - und widerspricht dem, was ich mal gelernt habe.

Viele Grüße

NoComment