Prototypes zum Erweitern der String-Klasse [ab Flash 7]

Tobias Menzel

Erfahrenes Mitglied
Hallo,

diese Prototypes erweitern die Stringklasse um einige Funktionen, die man bei der täglichen Arbeit vielleicht vermissen mag:
  • crop (String.crop-Methode)

    public crop(): String

    Schneidet Leerzeichen am Anfang und Ende des Strings ab und gibt das Resultat zurück. Der ursprüngliche String bleibt unberührt.

    Rückgabewerte:

    String - ein String

    Prototype Quellcode:
Code:
String.prototype.crop = function() {
	while (this.substr(0, 1) == " ") {
		this = this.substr(1);
	}
	while (this.substr(this.length - 1, 1) == " ") {
		this = this.substr(0, this.length - 1);
	}
	return this;
}
  • replace (String.replace-Methode)

    public replace(search:mixed, replace:mixed): String

    Ersetzt eine oder mehrere Zeichenketten in einem String durch eine oder mehrere andere Zeichenketten und gibt das Resultat zurück. Der ursprüngliche String bleibt unberührt.

    Parameter:

    Die Parameter für Suche und Ersetzung können wahlweise Strings oder Arrays sein.

    Ist search ein String, so wird jedes Vorkommen dieses Strings durch den String replace oder das erste Element des Arrays replace ersetzt.

    Ist search ein Array, so wird jedes Vorkommen jedes der Elemente dieses Arrays durch den String replace oder das jeweils korrespondierende Element des Arrays replace ersetzt.

    Rückgabewerte:

    String - ein String

    Beispiel:

    Im folgenden Beispiel werden die Namen "Theo", "Matthias" und "Kurt" durch ihre jeweiligen Initialien T., M., und K. ersetzt:
Code:
var str = "Theo besucht zusammen mit Matthias die Schwester von Kurt"

var str2 = str.replace(["Theo", "Matthias", "Kurt"], ["T.", "M.", "K."]);

trace(str2) // Ausgabe: T. besucht zusammen mit M. die Schwester von K.
Prototype-Quellcode:
Code:
String.prototype.replace = function(search, repl) {
	if (typeof(search) == "object") {
		for (var i=0; i<search.length; i++) {
			if (typeof(repl) == "object") {
				var r = repl[i];
				if (r == undefined) r = repl[repl.length - 1];
			} else {
				var r = repl;
			}
			this = this.split(search[i]).join(r);
		}
	} else {
		if (typeof(repl) == "object") {
			this = this.split(search).join(repl[0]);
		} else {
			this = this.split(search).join(repl);
		}
	}
	return this;
}


  • rotate (String.rotate-Methode)

    public rotate(amt:Number): String

    Rotiert den String um die angegebene Anzahl Zeichen und gibt das Resultat zurück. Der ursprüngliche String bleibt dabei unberührt.

    Parameter:

    amt:Number - Tiefe der Rotation

    Mit "Rotation" ist gemeint, dass bei positivem Wert von amt n Zeichen vom Ende des Strings an seinen Anfang gesetzt werden und bei negativem Wert von amt n Zeichen vom Anfang des Strings an sein Ende gesetzt werden.


    Rückgabewerte:

    String - ein String

    Beispiel:

    Im folgenden Beispiel wird der String "Hallo Welt" um 2 Zeichen nach links rotiert:
Code:
var str = "Hallo Welt";
var str2 = str.rotate(-2);

trace(str2); // Ausgabe: llo WeltHa

Prototype-Quellcode:
Code:
String.prototype.rotate = function(s) {
	var ostr = this.valueOf();
	if (s >= 0) {
		for (var i=0; i<s; i++) {
			ostr = ostr.substr(ostr.length - 1) + ostr.substr(0, ostr.length - 1);
		}
	} else {
		s = Math.abs(s);
		for (var i=0; i<s; i++) {
			ostr = ostr.substr(1, ostr.length - 1) + ostr.substr(0, 1);
		}
	}
	return ostr;
}


  • swapCase (String.swapCase-Methode)

    public swapCase(): String

    Ersetzt in einem String Großbuchstaben durch Kleinbuchstaben und umgekehrt und gibt das Ergebnis zurück. Der ursprüngliche String bleibt dabei unberührt.

    Rückgabewerte:

    String - ein String

    Prototype-Quellcode:
Code:
String.prototype.swapCase = function() {
	var ostr = "";
	for (var i=0; i<this.length; i++) {
		var l = this.substr(i, 1).toLowerCase();
		var h = this.substr(i, 1).toUpperCase();
		ostr += (this.substr(i, 1) == l)? h : l;
	}
	return ostr;
}


  • shortenTo (String.shortenTo-Methode)

    public shortenTo(l:Number[, delim:String[, lim:String]]): String

    Kürzt einen String auf die angegebene Länge Zeichen und gibt das Ergebnis zurück. Der ursprüngliche String bleibt dabei unberührt.

    Die Methode versucht zunächst, komplette Wörter (durch die angegebenen Trennzeichen delim getrennt) abzuschneiden und einen Trennstring sowie das Verkürzungszeichen anzuhängen, bis die Länge des Strings die angegebene Länge nicht überschreitet.

    Überschreitet die Länge des String auch danach noch die angegebene Länge, wird das letzte übriggebliebene Wort des Strings soweit gekürzt und das Verkürzungszeichen angehängt, bis die Länge des Strings die angegebene Länge nicht überschreitet.

    Diese Methode kann zum Verkürzen von Infotexten angewendet werden, die in Textfeldern begrenzter Breite angezeigt werden.

    Parameter:

    l:Number - Die Länge des zurückgegebenen Strings

    delim:String [optional] - Trennzeichen. Standardmäßig wird das Leerzeichen verwendet.

    lim:String [optional] - Verkürzungszeichen. Standardmäßig werden drei Punkte "..." verwendet.

    Rückgabewerte:

    String - ein String

    Beispiel:

    Im folgenden Beispiel wird der String "Hallo Welt" einmal auf 9 und einmal auf 7 Zeichen verkürzt:
Code:
var str = "Hallo Welt"; // 10 Zeichen

var str2 = str.shortenTo(9);

var str3 = str.shortenTo(7);

trace(str2); // Ausgabe: Hallo ...

trace(str3); // Ausgabe: Hall...

Prototype-Quellcode:
Code:
String.prototype.shortenTo = function(l, delim, lim) {
	if (lim == undefined) lim = "...";
	if (delim == undefined) delim = " ";
	var w = this.split(delim);
	var ostr = this.valueOf();
	if (l <= lim.length) {
		ostr = lim.substr(0, l);
		return ostr;
	}
	var sh = false;
	if (ostr.length > l) {
		while (ostr.length + lim.length + delim.length > l) {
			var i = ostr.lastIndexOf(delim);
			if (i >= 0) {
				sh = true;
				ostr = ostr.substr(0, i);
			} else {
				break;
			}
		}
	}
	if (sh) ostr = ostr + delim + lim;
	sh = false;
	if (ostr.length > l) {
		while (ostr.length + lim.length > l) {
			ostr = ostr.substr(0, ostr.length - 1);
			sh = true;
			if (lim.length > l) {
				ostr = lim.substr(0, l - 1);
				break;
			}
		}
	}
	if (sh) ostr = ostr + lim;
	return ostr;
}


  • getWidth (String.getWidth-Methode)

    public getWidth(font:String, size:Number[, tw:Boolean]): Number

    Gibt die voraussichtliche Breite eines Strings unter Angabe des verwendeten Zeichensatzes und der Schriftgröße zurück.

    Parameter:

    font:String - der verwendete Zeichensatz

    size:Number - die verwendete Schriftgröße

    tw:Boolean [optional] - TextField.textWidth-Eigenschaft anstelle der TextField._width-Eigenschaft verwenden.

    Rückgabewerte:

    Breite - eine Zahl

    Beispiel:

    Im folgenden Beispiel wird die Breite des Textes "Hallo Welt" unter Verwendung der Schriftart "Arial" und der Schriftgröße 12 basierend auf jeweils der textWidth- und der ._width-Eigenschaft ausgegeben:
Code:
var str = "Hallo Welt";

var n1 = str.getWidth("Arial", 12);

var n2 = str.getWidth("Arial", 12, true);

trace(n1); // Ausgabe: 60

trace(n2); // Ausgabe 56

Prototype-Quellcode:
Code:
String.prototype.getWidth = function(font, size, tw) {
	var htf = _root.createTextField("htf_" + (Math.random() * 9999)+ "_" + getTimer(), _root.getNextHighestDepth(), -5000, -5000, 0, 0);
	var hfm = new TextFormat();
	hfm.font = font;
	hfm.size = size;
	htf.autoSize = true;
	htf.text = this.valueOf();
	htf.setTextFormat(hfm);
	var r = (tw)? htf.textWidth : htf._width;
	htf.removeTextField();
	return r;
}

Weitere Prototypes werde ich ggf. hier anfügen.

Grüße,

Tobi
.
 

Neue Beiträge

Zurück