AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Delphi-PRAXiS - Lounge Job-Börse: Angebote und Gesuche 130 Zeilen Java nach Delphi gegen Bezahlung
Thema durchsuchen
Ansicht
Themen-Optionen

130 Zeilen Java nach Delphi gegen Bezahlung

Ein Thema von BlueStarHH · begonnen am 19. Nov 2017 · letzter Beitrag vom 19. Nov 2017
Antwort Antwort
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
849 Beiträge
 
Delphi 11 Alexandria
 
#1

130 Zeilen Java nach Delphi gegen Bezahlung

  Alt 19. Nov 2017, 11:19
Hallo zusammen,

ich benötigen jemanden, der mir einen Java-Code (130 Zeilen) nach Delphi übersetzt. Schreibt mir bitte per PN, was ihr dafür haben wollt.

Der Java-Code erzeugt aus einem Intervall (wie z.B. 45 bis 583) einen RegEx-Ausdruck. Hier
4[5-9]
[5-9][0-9]
[1-4][0-9][0-9]
5[0-7][0-9]
58[0-3]

Das setze ich dann zu \b(4[5-9]|[5-9][0-9]|[1-4][0-9][0-9]|5[0-7][0-9]|58[0-3])\b zusammen und fertig.
(Einfach [45-583] im RegEx-Ausdruck zu verwenden funktioniert leider nicht.)

Die Diskussion findet sich dazu unter https://stackoverflow.com/questions/...-number-ranges ist aber für diese Aufgabe nicht nötig. Es geht nur darum den Code nach Delphi umzusetzen. Unter https://ideone.com/j1Mh4c kann man den Java-Code mit verschiedenen Eingaben ausführen und sich das Resultat anschauen.

Code:
import java.util.*;

class Ideone {
    public static void main(String[] args) {
        final Scanner scanner = new Scanner(System.in);
        int start = scanner.nextInt();
        int end = scanner.nextInt();

        final LinkedList<Range> left = leftBounds(start, end);
        final Range lastLeft = left.removeLast();

        final LinkedList<Range> right = rightBounds(lastLeft.getStart(), end);
        final Range firstRight = right.removeFirst();

        LinkedList<Range> merged = new LinkedList<>();
        merged.addAll(left);
        if (!lastLeft.overlaps(firstRight)) {
            merged.add(lastLeft);
            merged.add(firstRight);
        } else {
            merged.add(Range.join(lastLeft, firstRight));
        }
        merged.addAll(right);

        merged.stream()
              .map(Range::toRegex)
              .forEach(System.out::println);
    }

    private static LinkedList<Range> leftBounds(int start, int end) {
        final LinkedList<Range> result = new LinkedList<>();
        while (start < end) {
            final Range range = Range.fromStart(start);
            result.add(range);
            start = range.getEnd()+1;
        }
        return result;
    }

    private static LinkedList<Range> rightBounds(int start, int end) {
        final LinkedList<Range> result = new LinkedList<>();
        while (start < end) {
            final Range range = Range.fromEnd(end);
            result.add(range);
            end = range.getStart()-1;
        }
        Collections.reverse(result);
        return result;
    }

}

class Range {
    private final int start;
    private final int end;

    public static Range fromEnd(int end) {
        final char[] chars = String.valueOf(end).toCharArray();
        for (int i=chars.length-1; i>=0;i--) {
            if (chars[i] == '9') {
                chars[i] = '0';
            } else {
                chars[i] = '0';
                break;
            }
        }

        return new Range(Integer.parseInt(String.valueOf(chars)), end);
    }

    public static Range fromStart(int start) {
        final char[] chars = String.valueOf(start).toCharArray();
        for (int i=chars.length-1; i>=0;i--) {
            if (chars[i]=='0') {
                chars[i] = '9';
            } else {
                chars[i] = '9';
                break;
            }
        }

        return new Range(start, Integer.parseInt(String.valueOf(chars)));
    }

    public static Range join(Range a, Range b) {
        return new Range(a.start, b.end);
    }

    private Range(int start, int end) {
        this.start = start;
        this.end = end;
    }

    public int getStart() {
        return start;
    }

    public int getEnd() {
        return end;
    }

    public boolean overlaps(Range r) {
        return end > r.start && r.end > start;
    }

    @Override
    public String toString() {
        return String.format("Range{start=%d, end=%d}", start, end);
    }

    public String toRegex() {
        String startStr = String.valueOf(getStart());
        String endStr = String.valueOf(getEnd());

        final StringBuilder result = new StringBuilder();

        for (int pos = 0; pos < startStr.length(); pos++) {
            if (startStr.charAt(pos) == endStr.charAt(pos)) {
                result.append(startStr.charAt(pos));
            } else {
                result.append('[')
                      .append(startStr.charAt(pos))
                      .append('-')
                      .append(endStr.charAt(pos))
                      .append(']');
            }
        }
        return result.toString();
    }
}

Geändert von BlueStarHH (19. Nov 2017 um 11:22 Uhr)
  Mit Zitat antworten Zitat
mensch72

Registriert seit: 6. Feb 2008
838 Beiträge
 
#2

AW: 130 Zeilen Java nach Delphi gegen Bezahlung

  Alt 19. Nov 2017, 15:32
Deine Vorgabe
4[5-9]
[5-9][0-9]
[1-4][0-9][0-9]
5[0-7][0-9]
58[0-3]


Mein aktuelles Schnellschuss Resultat... Angang gut, Mitte ?, Ende gut
4[5-9]
[5-9][0-9]
0
0
5[0-7][0-9]
58[0-3]

Für nur mal blind ohne Nachdenken umformatiert sieht das schon gut aus... jetzt wenn ich Lust habe guck ich heute nochmal genau wo mein Umsetzungsfehler für die Mitte da ist gerade noch ist
Miniaturansicht angehängter Grafiken
intervall2regex.png  
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
849 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: 130 Zeilen Java nach Delphi gegen Bezahlung

  Alt 19. Nov 2017, 15:43
jetzt wenn ich Lust habe guck ich heute nochmal genau wo mein Umsetzungsfehler für die Mitte da ist gerade noch ist
Das wäre super!
  Mit Zitat antworten Zitat
mensch72

Registriert seit: 6. Feb 2008
838 Beiträge
 
#4

AW: 130 Zeilen Java nach Delphi gegen Bezahlung

  Alt 19. Nov 2017, 16:02
ok, fehlte nur ne Kleinigkeit in einer Bedingung... ich hätte nun die gewünschte Lösung für dich... schreib wenn du willst ne PN
Miniaturansicht angehängter Grafiken
intervall2regextokyo.png  
Angehängte Dateien
Dateityp: rar Intervall2regex.rar (598,9 KB, 5x aufgerufen)
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
849 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: 130 Zeilen Java nach Delphi gegen Bezahlung

  Alt 19. Nov 2017, 16:18
schreib wenn du willst ne PN
Danke, hast eine PN.
  Mit Zitat antworten Zitat
mensch72

Registriert seit: 6. Feb 2008
838 Beiträge
 
#6

AW: 130 Zeilen Java nach Delphi gegen Bezahlung

  Alt 19. Nov 2017, 17:41
Wie per PN geklärt: hier der Source für dich und morgen viel Erfolg bei der Lösung für deinen Kunden
Angehängte Dateien
Dateityp: rar Intervall2regexPWD4src.rar (7,3 KB, 5x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz