Hallo Zusammen,
ich habe ein kleines/großes Problemchen nach dem Umstellen auf Java17.
Und zwar hat Java leider eine Restriktion eingebaut per Reflection auf bestimmte interne Funktionen zu gestatten.
Ich brauche jedoch aus der Pattern-Klasse die "NamedGroups" HashMap welche mir ja den Gruppennamen und die GroupId liefern soll.
Ich kann leider nicht mehr die methode oder variable mit accessible(true) abfragen.
Ich habe mir daraufhin eine Hilfsfunktion geschrieben welche leider ein wenig komplex ist und zudem Matcher erfordert, was vorher nicht notwendig war.
Das ist aber garnicht das Problem, denn das Problem an meiner neuen Methode ist, dass es nur die Groups zurückliefert in einer HashMap, welche auch tatsächlich in dem gesuchten Text vorkommt.
Ich brauche aber für meinen weiteren Prozess (SyntaxHighlighting) die volle Liste mit allen Gruppen, da meine Logik die halt mit Java8/11 funktioniert hatte alle Gruppen erwartet und es verdammt aufwendig wäre diese Logik umzuschreiben bzw. mir eine neue auszudenken.
Die Hilfsmethode sieht im übrigen folgendermaßen aus für diejenigen die es interessiert:
Falls ihr einen Tipp habt was ich vielleicht noch machen kann wäre es echt cool wenn ihr mich darauf hinweisen könnt
Thx
ich habe ein kleines/großes Problemchen nach dem Umstellen auf Java17.
Und zwar hat Java leider eine Restriktion eingebaut per Reflection auf bestimmte interne Funktionen zu gestatten.
Ich brauche jedoch aus der Pattern-Klasse die "NamedGroups" HashMap welche mir ja den Gruppennamen und die GroupId liefern soll.
Ich kann leider nicht mehr die methode oder variable mit accessible(true) abfragen.
Ich habe mir daraufhin eine Hilfsfunktion geschrieben welche leider ein wenig komplex ist und zudem Matcher erfordert, was vorher nicht notwendig war.
Das ist aber garnicht das Problem, denn das Problem an meiner neuen Methode ist, dass es nur die Groups zurückliefert in einer HashMap, welche auch tatsächlich in dem gesuchten Text vorkommt.
Ich brauche aber für meinen weiteren Prozess (SyntaxHighlighting) die volle Liste mit allen Gruppen, da meine Logik die halt mit Java8/11 funktioniert hatte alle Gruppen erwartet und es verdammt aufwendig wäre diese Logik umzuschreiben bzw. mir eine neue auszudenken.
Die Hilfsmethode sieht im übrigen folgendermaßen aus für diejenigen die es interessiert:
Java:
public static Map<String, Integer> getNamedGroups(Pattern regex, String text) throws SecurityException, IllegalArgumentException {
Map<String, Integer> mapOfNamedGroups = new HashMap<>();
Matcher matcherGroups = Pattern.compile("\\(\\?<([a-zA-Z][a-zA-Z0-9]*)>").matcher(regex.pattern());
while (matcherGroups.find()) {
Matcher matcherRegex = regex.matcher(text);
secondWhile: while (matcherRegex.find()) {
for (int groupId = 1; groupId < matcherRegex.groupCount(); groupId++) {
if (matcherRegex.group(groupId) != null && matcherRegex.group(matcherGroups.group(1)) != null) {
mapOfNamedGroups.put(matcherGroups.group(1), groupId);
break secondWhile;
}
}
}
}
return mapOfNamedGroups;
}
Falls ihr einen Tipp habt was ich vielleicht noch machen kann wäre es echt cool wenn ihr mich darauf hinweisen könnt
Thx