Grob der ursprüngliche Java-Code eins zu eins nach Delphi übersetzt:
Delphi-Quellcode:
program Project6;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils;
procedure start();
begin
Writeln('
Duplikate: ');
end;
procedure Main;
var
s:
string;
yc, i, j: Integer;
strings: TArray<
string>;
begin
s := '
Ohne Clean Code ist Code nicht wartbar.';
s := s.ToLower();
strings := s.split(['
']);
start();
for i := 0
to Length(strings) - 1
do
begin
yc := 1;
for j := i + 1
to Length(strings) - 1
do
begin
if (strings[i].equals(strings[j]))
then
begin
Inc(yc);
strings[j] := '
0';
end;
end;
if ((yc > 1)
and (strings[i] <> '
0'))
then
begin
Writeln(strings[i]);
end;
end;
end;
begin
try
Main;
except
on E:
Exception do
Writeln(E.ClassName, '
: ', E.
Message);
end;
Readln;
end.
Und hier eine hausbackende und hemdsärmelige Lösung, die Build-In-Funktionalität nutzt (ab Delphi XE7) und mithilfe flacher Funktionen die Duplikate im String sucht und ausgibt.
Es muss nicht immer gleich eine ganze Klasse sein.
Oft reicht einfach nur eine flache Funktion.
Delphi-Quellcode:
program Project7;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils,
System.Generics.Collections;
function GetDuplicatesFromString(
const AString:
string): TArray<
string>;
var
Map: TDictionary<
string, Integer>;
WordCount: Integer;
SingleString:
string;
Strings: TArray<
string>;
begin
Result := [];
Strings := AString.ToLower.Split(['
']);
Map := TDictionary<
string, Integer>.Create;
try
for SingleString
in Strings
do
begin
if Map.TryGetValue(SingleString, WordCount)
then
begin
Map[SingleString] := WordCount + 1;
//optionale Zeile, falls man später die Häufigkeit noch braucht
if WordCount = 1
then
Result := Result + [SingleString];
end
else
begin
WordCount := 1;
Map.Add(SingleString, WordCount);
end;
end;
finally
Map.Free;
end;
end;
procedure PrintStringArray(
const AStrings: TArray<
string>);
var
SingleString:
string;
begin
for SingleString
in AStrings
do
Writeln(SingleString);
end;
procedure Main;
var
TestString:
string;
Duplicates: TArray<
string>;
begin
TestString := '
Ohne Clean Code ist Code nicht wartbar.';
Duplicates := GetDuplicatesFromString(TestString);
PrintStringArray(Duplicates);
end;
begin
try
Main;
except
on E:
Exception do
Writeln(E.ClassName, '
: ', E.
Message);
end;
Readln;
end.