![]() |
Identische Zeichen in einem String erkennen
Hallo,
ich habe einen String, in dem der Hersteller eines Gerätes zurückgeliefert wird. Bevor ich diesen String nun ausgebe, möchte ich ihn inhaltlich prüfen, zumindest insoweit das möglich ist. Dazu gehört zuerst die Abfrage, ob die Stringlänge größer als 0 ist. Falls nicht, wird der String als ungültig deklariert. Nun habe ich durch ein Phänomen als String folgendes zurückgeliefert bekommen: 'ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ' Ich möchte also eine Art Abfrage hinzufügen, ob der String nur aus identischen Zeichen besteht, und wenn dies der Fall ist, wird der String als ungültig deklariert. Ein Ansatz war das Addieren der Ordinalwert für jedes einzelne Zeichen und die anschließende Berechnung mittels MOD, ob ein Rest übrig bleibt. Bei ausschließlich identischen Zeichen bleibt kein Rest übrig. Dieses Verfahren ist mir aber zu unsicher, da auch korrekte Stringbezeichnungen bei einer bestimmten Ordinal-Konstellation keinen Rest übrig lassen, und der String dadurch als falsch eingestuft wird, obwohl er korrekt ist. Hat jemand eine Idee, wie man das angehen kann ? |
Re: Identische Zeichen in einem String erkennen
Wie wärs wenn du das erste Zeichen nimmst und stringreplace(deinString, erstesZeichen, '', [replaceAll]) machst.
Wenn das Result = '' dann waren alle chars im String identisch. |
Re: Identische Zeichen in einem String erkennen
Entweder einfach alle Buchstaben in einer Schleife durchgehen, und auf Gleichheit mit dem ersten überprüfen, oder (kürzer aber etwas langsamer) stringofchar(str[1], length(str)) = str überprüfen ;)
|
Re: Identische Zeichen in einem String erkennen
muss wohl an der Wärme liegen...
Delphi-Quellcode:
function SameCharsInString(AString : String) : Boolean;
var i, Count : Integer; begin count := length(AString); if count < 2 then Result := False else begin i := 2; Result := True; while i <= count do if AString[i] <> AString[1] then begin Result := False; Break; end else inc(i); end; end; procedure TForm1.Button1Click(Sender: TObject); begin if SameCharsInString(Edit1.Text) then ShowMessage('same Chars') else ShowMessage('diff. Chars or to short'); end; |
Re: Identische Zeichen in einem String erkennen
Vielen Dank, ich habe die Lösung. Die Variante von Satty67 hat mich überzeugt.
Und ja, es ist in der Tat zu warm heute. |
Re: Identische Zeichen in einem String erkennen
Oder mit einer for-Schleife:
Delphi-Quellcode:
function SameCharsInString(const AString : String) : Boolean;
var i : Integer; begin Result := Length(AString) > 1; if Result then for i := 2 to Length(AString) do begin Result := AString[i] = AString[1]; if not Result then break; end; end; |
Re: Identische Zeichen in einem String erkennen
Das Zeichen 'ÿ' entspricht dem Byte-Code $FF und wird oft verwendet, um einen ungültigen String von einem Leerstring zu unterscheiden. Hätte man hier alles mit Null gefüllt, wäre die erste Null als String-Ende und der gesamte String als Leerstring erkannt worden, was ja durchaus ein gültiger Wert sein kann.
|
Re: Identische Zeichen in einem String erkennen
wenn dem so ist, dann könnte es ja auch sein, daß vorne ein gütiger String und hinten dran der Rest mit ÿ gefüllt wäre
dann wäre soeine Variante doch nicht so schlecht
Delphi-Quellcode:
damit würden dann ja nur die ungültigen Zeichen entfernt
deinString := StringReplace(deinString, 'ÿ', '', [replaceAll]);
|
Re: Identische Zeichen in einem String erkennen
Zitat:
StringReplace ist natürlich auch sinnvoll, da man eine vorhandene Funktion nutzt. Mich reizte in dem Moment halt wieder die grundsätzliche Umsetzung mit eigenem Code. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz