Foren Suche

  • StringModificatorWithRegex - HauptthemaDatum12.11.2016 15:33

    Hier nun die nächste Version mit ersetzen aller Fullmatches bzw. Groupmatches.

    Version 0.2:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
     
    class RegexSyntaxException(message: String) extends Exception(message)
     
    case class Group(matching: String, startPositionMatching: Int, indexGroup: Int)
     
    case class Full(matching: String, startPositionMatching: Int)
     
    case class MatchResult(isMatching: Boolean, regexHasGroup: Boolean, isGroupMatching: Boolean, groups: Seq[Group], fulls: Seq[Full])
     

    class StringModifierWithRegex(regex: String) {
    private val regexCompiled = compile()
     
    def test(text: String) : MatchResult = {
    val matcher = regexCompiled.matcher(text)
    fillResult(matcher)
    }
     
    def replaceAllFullMatches(text: String, replacement: String) : String = {
    var newText = text
    var nextMatch: Option[(Full, Option[Group])] = None
    var startIndex = 0
     
    do {
    val matcher = regexCompiled.matcher(newText)
    nextMatch = findNextMatch(matcher, startIndex)
    if (nextMatch != None) {
    newText = replaceText(newText, nextMatch.get._1.startPositionMatching, nextMatch.get._1.matching.length, replacement)
    startIndex = nextMatch.get._1.startPositionMatching + replacement.length
    }
    } while (nextMatch != None)
    newText
    }
     
    def replaceAllGroupMatches(text: String, replacement: String) : String = {
    var newText = text
    var nextMatch: Option[(Full, Option[Group])] = None
    var startIndex = 0
     
    do {
    val matcher = regexCompiled.matcher(newText)
    nextMatch = findNextMatch(matcher, startIndex)
    if (nextMatch != None && nextMatch.get._2 != None) {
    newText = replaceText(newText, nextMatch.get._2.get.startPositionMatching, nextMatch.get._2.get.matching.length, replacement)
    startIndex = nextMatch.get._2.get.startPositionMatching + replacement.length
    }
    } while (nextMatch != None)
    newText
    }
     
    private def compile() : Pattern = {
    var result = Pattern.compile("")
     
    try {
    result = Pattern.compile(regex)
    }
    catch {
    case ex: PatternSyntaxException => throw new RegexSyntaxException(ex.getMessage)
    }
    result
    }
     
    private def replaceText(text: String, startPosition: Int, length: Int, replacement: String) : String = {
    val before = text.substring(0, startPosition)
    val after = text.substring(startPosition + length)
    before + replacement + after
    }
     
    private def fillResult(matcher: Matcher) : MatchResult = {
    var fulls = Seq[Full]()
    var groups = Seq[Group]()
     
    val regexHasGroup = if (matcher.groupCount() == 0) false else true
     
    def findNextAndFillResultRec(matcher: Matcher, matchN: Int) : MatchResult = {
    val findNext = matcher.find()
    if (matchN == 1 && ! findNext) {
    MatchResult(isMatching = false, regexHasGroup, isGroupMatching = false, Seq[Group](), Seq[Full]())
    }
    else if (findNext) {
    // calculate result
    val fullStartPosition = matcher.start()
    val fullMatch = matcher.group()
     
    fulls = fulls:+Full(fullMatch, fullStartPosition)
     
    var groupStartPosition = 0
     
    breakable {
    for (i <- 1 to matcher.groupCount()) {
    groupStartPosition = matcher.start(i)
    if (groupStartPosition != -1) {
    groups = groups:+Group(matcher.group(i), groupStartPosition, i)
    break
    }
    }
    }
     
    findNextAndFillResultRec(matcher, matchN + 1)
    }
    // NOT (matcher.find())
    else {
    val isMatching = if (fulls.size > 0) true else false
    val isGroupMatching = if (groups.size > 0) true else false
    MatchResult(isMatching, regexHasGroup, isGroupMatching, groups, fulls)
    }
    }
     
    findNextAndFillResultRec(matcher, 1)
    }
     
    def findNextMatch(matcher: Matcher, startIndex: Int) : Option[(Full, Option[Group])] = {
    var resultFull = Full("", 0)
    var resultGroup: Option[Group] = None
     
    val findNext = matcher.find(startIndex)
    if (! findNext) {
    None
    }
    else {
    // calculate result
    val fullStartPosition = matcher.start()
    val fullMatch = matcher.group()
     
    resultFull = Full(fullMatch, fullStartPosition)
     
    var groupStartPosition = 0
     
    breakable {
    for (i <- 1 to matcher.groupCount()) {
    groupStartPosition = matcher.start(i)
    if (groupStartPosition != -1) {
    resultGroup = Some(Group(matcher.group(i), groupStartPosition, i))
    break
    }
    }
    }
     
    Some(resultFull, resultGroup)
    }
    }
     
    }
     

  • StringModificatorWithRegex - HauptthemaDatum11.11.2016 10:10

    Es existiert nun die Grundfunktion (Berechnung des Ergebnisses) in der ersten Version.

    Hier nun der Code Version 0.1:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
     
    class RegexSyntaxException(message: String) extends Throwable
     
    case class Group(matching: String, startPositionMatching: Int, indexGroup: Int)
     
    case class Full(matching: String, startPositionMatching: Int)
     
    case class MatchResult(isMatching: Boolean, regexHasGroup: Boolean, isGroupMatching: Boolean, groups: Seq[Group], fulls: Seq[Full])
     

    class StringModifierWithRegex(regex: String) {
    private val regexCompiled = compile()
    private var matchResult = MatchResult(isMatching = false, regexHasGroup = false, isGroupMatching = false, Seq[Group](), Seq[Full]())
     
    private def compile() : Pattern = {
    var result = Pattern.compile("")
     
    try {
    result = Pattern.compile(regex)
    }
    catch {
    case ex: PatternSyntaxException => throw new RegexSyntaxException(ex.getMessage)
    }
    result
    }
     
    def evaluate(text: String) : MatchResult = {
    val matcher = regexCompiled.matcher(text)
     
    matchResult = fillResult(matcher)
    matchResult
    }
     
    private def fillResult(matcher: Matcher) : MatchResult = {
    var fulls = Seq[Full]()
    var groups = Seq[Group]()
     
    val regexHasGroup = if (matcher.groupCount() == 0) false else true
     
    def findNextAndFillResultRec(matcher: Matcher, matchN: Int) : MatchResult = {
    val findNext = matcher.find()
    if (matchN == 1 && ! findNext) {
    MatchResult(isMatching = false, regexHasGroup, isGroupMatching = false, Seq[Group](), Seq[Full]())
    }
    else if (findNext) {
    // calculate result
    val fullStartPosition = matcher.start()
    val fullMatch = matcher.group()
     
    fulls = fulls:+Full(fullMatch, fullStartPosition)
     
    var groupStartPosition = 0
     
    breakable {
    for (i <- 1 to matcher.groupCount()) {
    groupStartPosition = matcher.start(i)
    if (groupStartPosition != -1) {
    groups = groups:+Group(matcher.group(i), groupStartPosition, i)
    break
    }
    }
    }
     
    findNextAndFillResultRec(matcher, matchN + 1)
    }
    // NOT (matcher.find())
    else {
    val isMatching = if (fulls.size > 0) true else false
    val isGroupMatching = if (groups.size > 0) true else false
    MatchResult(isMatching, regexHasGroup, isGroupMatching, groups, fulls)
    }
    }
     
    findNextAndFillResultRec(matcher, 1)
    }
    }
     

  • Dresden Scala StammtischDatum07.11.2016 17:28
    Foren-Beitrag von Falk im Thema Dresden Scala Stammtisch

    Ich muss leider sehr kurzfristig wegen Krankheit absagen.

  • StringModificatorWithRegex - HauptthemaDatum27.10.2016 12:55
    Thema von Falk im Forum Kleine Projekte

    Dieses kleine Projekt soll die Auswertung von regulären Ausdrücken standardisieren, um bei der Nutzung von diesen Ausdrücken sich nur noch auf den Ausdruck selber und das Auswertungsergebnis zu konzentrieren.

    Zusätzlich soll diese Auswertung bei der Modifikation von Strings genutzt werden.

    Bald erscheint hier die erste Version.

  • Thema von Falk im Forum Kleine Projekte

    Mit der Klasse 'String' bringt Java unter anderem die Methode 'String replaceAll(String regex, String replacement)' mit.

    Das Treffen des regulären Ausdrucks bezieht sich dabei immer auf die Vollmatches und nicht auf die eventuell vorhandenen Gruppenmatches. Beispiel:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    package de.rehnfalk.stringmodificatorwithregex
     
    object Application {
    def main(args: Array[String]) {
    val text = " sdiuh ivuhv ahGTG787auhv viu fvua MRE_66543 fviv v v T_498 6656ui26h5h56 69hg8 b zb7sg7 g";
    val result1 = text.replaceAll("[A-Z]+_[0-9]+", "STD_123");
    val result2 = text.replaceAll("([A-Z])+_[0-9]+", "XXX");
    System.out.println(result1);
    System.out.println(result2);
     
    // print out:
    // sdiuh ivuhv ahGTG787auhv viu fvua STD_123 fviv v v STD_123 6656ui26h5h56 69hg8 b zb7sg7 g
    // sdiuh ivuhv ahGTG787auhv viu fvua XXX fviv v v XXX 6656ui26h5h56 69hg8 b zb7sg7 g
    }
    }
     



    Also wäre ein Ziel des Projekts an dieser Stelle eine Unterscheidung einzuführen.

  • Ich habe herausgefunden, dass die ArrayLists nur dann verkürzt (nur mit size-Angabe) angezeigt wurden, wenn das Objekt selber eine ArrayList ist.

    Wenn die ArrayList stattdessen in einem anderen Objekt enthalten ist, wird wie gewünscht der Inhalt auch zum String umgewandelt.

    Als Übergangslösung kann man alle ArrayListen in Vectoren konvertieren.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    ReflectionToStringBuilder reflectionToStringBuilder = null;
     
    if (obj instanceof List<?>) {
    @SuppressWarnings("unchecked")
    List<Object> newList = new Vector<Object>((List)obj);
    reflectionToStringBuilder = new ReflectionToStringBuilder(newList, new MultilineRecursiveToStringStyle());
    }
    else {
    reflectionToStringBuilder = new ReflectionToStringBuilder(obj, new MultilineRecursiveToStringStyle());
    }
    return reflectionToStringBuilder.toString();
     



    Anmerkung: Die Nutzung des MultilineStyles ist ab der Version 3.5 möglich, da diese Klasse in den vorherigen Versionen Package-Private ist.

  • Dresden Scala StammtischDatum25.10.2016 14:58
    Foren-Beitrag von Falk im Thema Dresden Scala Stammtisch

    Der nächste Termin ist am Montag den 07.11.2016 um 20:00 Uhr wieder im Cafe Müllers auf der Bergstrasse.

  • Thema von Falk im Forum String-Operationen

    Hallo,

    wenn man in einem regulären Ausdruck Gruppen verwendet, ist die Auswertung des Treffens eines Textes auf den Ausdruck abhängig von der Gestaltung des Ausdrucks.

    So wird bei dem Ausdruck '([A-Z]+_[0-9]+)|([0-9]+)' mit dem Text 'ztr ZU U _ SINN_41 876 u TREE' nach dem Aufrufen der Methode 'find()' in der Methode 'group(1)' der String 'SINN_41' zurückgeliefert.

    Nun meine Frage, ist die Abhängigkeit der Auswertung (Angabe der 1 für die erste Gruppe oder 2 für die zweite) gewollt? Der Nachteil ist nämlich, dass bei einer Änderung des regulären Ausdrucks die Abfrage auch geändert werden muss.

    Falk

  • Thema von Falk im Forum Java-Bibliotheken

    Hallo,

    ich bin bin bisher ganz zufrieden mit der toString-Umwandlung von unbekannten Objekten mittels Apache-commons-lang3 und dem ReflectionToStringBuilder.

    Jetzt bin ich aber darauf gestoszen, dass mir diese Bibliothek für ein Objekt mit einer List das Ergebnis 'ArrayList[size=2]' liefert. Die dafür genutzte Einstellung sieht wie folgt aus:

    1
    2
    3
    4
    5
     
            setArrayContentDetail(true);
    setUseShortClassName(true);
    setUseClassName(true);
    setUseIdentityHashCode(false);
    setFieldSeparator(", ");
     



    Weil 'ArrayContentDetail' auf 'true' steht, hätte ich gedacht, die einzelnen Elemente der Liste werden auch per Reflection bearbeitet.

    Zudem habe ich neben dem 'ToStringStyle' den 'RecursiveToStringStyle' verwendet - jedoch ohne Erfolg.

    Falk

  • Facebook Login möglichDatum20.10.2016 12:04
    Thema von Falk im Forum Forum

    Hallo,

    von nun an ist ein Login über den Facebook-Account möglich.

    Falk

  • Dresden Scala StammtischDatum20.10.2016 10:34
    Thema von Falk im Forum Dresden Scala

    Hallo,

    in der nächsten Zeit ist ein Treff der Dresden Scala Gruppe geplant, bei dem es einen Vortrag geben wird. Diese Treffs sollen weiterhin bestehen bleiben.

    Zusätzlich zu den Treffs habe ich gedacht, einen 'Dresden Scala Stammtisch' ins Leben zu rufen. Dieser soll aber nicht bei AvantgardeLabs stattfinden, sondern auf 'neutralem' Boden zum Beispiel in einer Kneipe.

    Zum Unterschied zu den Vortragstreffs soll hier der Fokus auf Kommunikation, Sozializing und auch Scalageschwätz liegen. Der Vorteil hier wäre dass Anfänger hier besser unterstützt werden.

    Als Termin schlage ich den Montag, den 24. Oktober 2016 um 20:00 Uhr und als Treffpunkt provisorisch 'Cafe Müllers' auf der Bergstrasse vor.

    Falk

  • Thema von Falk im Forum Grundlagen

    Hallo,

    was sind eigentlich die Vorteile von Scalas Companion Object gegenüber Javas static Deklaration?

    Falk

  • Syntax-HighlightingDatum29.09.2016 09:40
    Foren-Beitrag von Falk im Thema Syntax-Highlighting

    Ich habe das Syntax-Highlighting im Forum erfolgreich eingesetzt. Es muss sich nur noch in der Praxis bewähren.

    Falls doch ein anderer Forenhoster genommen wird, muss man sehen, ob das Skript auch dort verwendet werden kann.

  • Wenn ich das richtig verstanden habe, sollte man alle gefangenen Exceptions auf Verschachtelung prüfen und wenn diese besteht, bei der zu erstellenden eigenen Exception den originalen Nachrichtentext einbauen und die Ursprüngliche Exception nicht im Konstruktor verwenden.

  • Test SyntaxDatum29.09.2016 09:25
    Foren-Beitrag von Falk im Thema Test Syntax

    Das Abarbeiten des Skripts dauert ein wenig Zeit. Mal sehen wie die Zeiten sind, wenn ein Thema sehr lang ist, und viele Codebeispiele hat.

    Ich kann mir gut vorstellen, dass das Skript noch etwas optimiert werden kann.

  • Testphase für scala-forum.xobor.deDatum29.09.2016 09:09
    Thema von Falk im Forum Forum

    Hallo,

    für dieses Forum soll eine Testphase existieren in der geprüft wird, inwieweit sich xobor.de als Forenhoster eignet.

    Die Phase soll zirka zwei Monate also bis Ende November 2016 dauern.

    Entweder wird die Testphase bei Unzufriedenheit abgebrochen oder am Ende der Phase wird entschieden, ob der Hoster genommen wird.


    Falk

  • Thema von Falk im Forum Java-Exceptions

    Hallo,

    Exceptions haben bekannterweise vier Konstruktoren - den Standardkonstruktor, einen Konstruktor mit der Nachricht, einen Konstruktor mit der Ursache und einen mit beiden als Parameter.

    Gibt es eine beste Praxis für die Nutzung der Konstruktoren, eigentlich der letzten drei, so dass die Verschachtelung der Exceptions nicht zu einem unauflösbaren Knäul führt, der 'catch'-Bereich möglichst einfach bleibt und der Stacktrace gut leserlich wird (wahrscheinlich kann man an dem Stacktrace nicht so viel ändern) (insbesondere bei mehrmals ineinander geschachtelten Exceptions) ?

    Meine zweite Frage: Wie sinnvoll ist der Entwurf einer eigenen Exceptionshierarchie (bei Mehrschichtenarchitekturen oder bei Applikationen mit vielen Komponenten), um die oben aufgeführten Ziele zu erreichen?


    Falk

  • Ausweichen auf anderen ForenhosterDatum23.09.2016 10:40
    Thema von Falk im Forum Forum

    Hallo,

    Wenn sich heraustellt, dass Syntaxhighlighting nur schwer oder gar nicht zu realisieren ist, muss ein anderer Hoster gefunden werden.

    Das kann zum einen ein Anbieter sein, welcher auch die täglichen Backups übernimmt, oder man kümmert sich darum selbst auf einem eigenen Server.

    Diese Thema soll als Sammelstelle für Hoster dienen, immer her mit Vorschlägen bitte !

    Falk

  • Syntax-HighlightingDatum23.09.2016 10:34
    Foren-Beitrag von Falk im Thema Syntax-Highlighting

    Derzeit bin ich noch am recherchieren, ob code-prettify eingesetzt werden kann.

    Ich habe dazu im Hilfeforum einen Beitrag geschrieben.

    Falls diese Funktionalität nur über Plugins realisiert werden kann, müsste man eines selber schreiben (in der kostenlosen Version des Forums ist EIN Plugin möglich) und es würde zudem noch eine Weile dauern bis das Forum starten kann.

  • Syntax-HighlightingDatum22.09.2016 10:24
    Thema von Falk im Forum Forum

    Hallo,

    Bevor das Forum starten kann ist es wichtig das Syntax-Highlighting einzurichten.

    Ich bin momentan dabei, ein JavaScript anzuschauen und die Möglichkeiten für verschiedene Programmiersprachen herauszufinden.

    Wenn jemand Erfahrung mit Foren und Syntax-Highlighting hat kann er sich bei mir melden.


    Falk

Inhalte des Mitglieds Falk
Beiträge: 23
Xobor Einfach ein eigenes Xobor Forum erstellen
Datenschutz