Illegal Group Reference

oOJavaNeulingOo

Bekanntes Mitglied
Hi!

Java wirft mir bei dieser Zeile immer eine "Illegal Group Reference" aus:
Java:
f = f.replaceAll("%dhj", getDHJ());

getDHJ macht jedoch nichts anderes als einen bestimmten String zurückzugeben:
Java:
public String getDHJ(){
		return dhj;
	}

Welcher durch diese Methode gesetzt wird:
Java:
private void setDHJ() throws Exception{
		/* Hier ein paar Sachen zum auslesen, für dieses Beispiel nicht wichtig - Allein das parsen. */
                dhj = parser.parse(einstringwiegesagtunwichtig);
	}

Jetzt zum interessanten Teil:

Meine parse() Funktion macht dies:
Java:
public String parse(String html){
		for (Map.Entry<String, String> entry: parseMap.entrySet()) {
            html = html.replaceAll(entry.getKey().toString(), entry.getValue().toString());
        }return html;

Und in die HashMap wurden vorherig verschiedene Strings geputtet. Einer davon war dieser hier:
Java:
parseMap.put("\\$","\\\\\\$");

Wieso kriege ich also diese Exception ???

MfG
 
Zuletzt bearbeitet von einem Moderator:
'trotz Versuch es zu vermeiden' habe ich aus dem Titel genommen
und im Posting steht auch rein gar nichts vom Versuch,

nichtmal das aller naheliegendste machst du: zu posten, was denn getDHJ() IST, was für ein String, welcher Inhalt??
ein einfaches System.out.println() würde mehr bringen als die recht irrelevanten Details was du wo aus welchem HTML zusammenbaust..


'Illegal Group Reference' könnte man dann auch in eine Suchmaschine eintippen,
freilich nicht so leicht einen guten Link zu finden (wie für jemand der weiß was gesucht ist),
hier dann eben eine Seite, die alles erklären dürfte:
JAVA: illegal group reference | Tech 1.0 Blog
 
In ganz genau diesen Blog habe ich reingeschaut. Okay, nicht nur in den - Letzendlich habe ich die Lösung eines anderen Blogs genommen, nämlich diese hier:

parseMap.put("\\$","\\\\\\$");


Funktioniert aber nicht. Wenn ich nun aber Matcher.quoteReplacement(iwas) benutze, wird zwar keine Fehlermeldung ausgeworfen, jedoch funktioniert der ganze Rest vom parser nicht und der Nutzen meines Programmes wurde auf die Hälfte reduziert 🙁

Was genau DHJ ist kann ich nicht sagen, da es wie gesagt aus Internet-Seiten per URLConnection ausgelesen wird.

EDIT: Hupps ja, werde eine Ausgabe einbauen - Muss dafür aber an den PC, was noch dauern kann 🙁
 
ich meinte an der Stelle
> f = f.replaceAll("%dhj", getDHJ());
getDHJ() in einen String zu speichern und auszugeben, aber du hast ja auch schon was von $ gepostet, mein Fehler


> Funktioniert aber nicht.
bei mir ist "\\\\\\$" gut, Umweg Map und wer weiß was alles ist wohl mal wieder doch schlecht,
letzlich ist nur spannend, was bei getDHJ() herauskommt,
wobei es freilich schon schwer wird, da die Ausgabe vom Quellcode um ein paar \\\ abweicht usw.

Java:
public class Test {

	public static void main(String[] args) {
		System.out.println("a$".replaceAll("\\$", "\\\\\\$")); // geht
		System.out.println("a$".replaceAll("\\$", "\\$")); // geht
		System.out.println("a$".replaceAll("\\$", "$")); // geht nicht
	}

}

-----

> funktioniert der ganze Rest vom parser nicht und der Nutzen meines Programmes wurde auf die Hälfte reduziert

was dein Programm leisten soll musst du natürlich vorher überlegen, das kann niemand hellsehen,
unbekannte Ersetzungen, bei Problemen beliebige Quotes reinsetzen usw., da sind Probleme verständlich

nur wenn klar ist was zu willst, etwa wie im Link "I like dollar symbol" mit $-Symbol ersetzen, kann man auch helfen
 
Nunja, mein Programm besteht quasi aus einem HTML-Parser, welcher für verschiedene Zwecke eingesetzt werden kann - Allerdings funktioniert noch nicht so ganz Oo.. An der Parse-Methode liegt der Fehler nicht, aber ich wüsste auch nicht dass es an dem Zeug was ich in die HashMap gesteckt habe liegt :/

Das Problem ist, dass manche HTML-Codes manchmal konvertiert werden, manchmal wiederrum auch nicht.


EDIT: Hupps, das hat man davon wenn man alles per Hand tippt -.- GLeich kommt der echte Code 🙂


zB ist bei der Ausgabe manchmal trotzdem noch ein <i></i> drin, obwohl es eigentlich abgefangen sein müsste.
 
Zuletzt bearbeitet:

Zurück
Oben