3 Stimmen

Java statischer Instanzersteller?

Ich möchte ein RegEx-Muster statisch erstellen, aber ich glaube, ich habe die Syntax falsch?

static {
  Pattern noHREF = Pattern.compile("<a.+?>", Pattern.CASE_INSENSITIVE);
}

 public static String getStringWithHREFsRemoved(String html) {
    Matcher m = noHREF.matcher(html);
etc.....

3voto

aioobe Punkte 397211

Sie müssen die noHREF Variable als statische Mitgliedsvariable Ihrer Klasse.

static Pattern noHREF = Pattern.compile("<a.+?>", Pattern.CASE_INSENSITIVE);

public static String getStringWithHREFsRemoved(String html) {
    Matcher m = noHREF.matcher(html);
    // ...

In dem Code, den Sie in Ihrer Frage geschrieben haben, ist die noHREF-Variable eine lokale (temporäre) Variable, deren Bereich zwischen static { et } .

2voto

mdma Punkte 55529

Wenn Sie erklären

static {
   Pattern noHREF = Pattern.compile("<a.+?>", Pattern.CASE_INSENSITIVE);
}

Dies ist eine anonyme statische Methode, die ausgeführt wird, wenn die Klasse geladen wird, und die noHREF-Deklaration ist eine lokale Variable in dieser Methode und kein statisches Feld, wie Sie es erwarten. Um ein statisches Feld zu erhalten, verwenden Sie die Deklaration

static Pattern noHREF = Pattern.compile("<a.+?>", Pattern.CASE_INSENSITIVE);

Dies ermöglicht Ihnen dann den Zugriff auf noHREF von einer statischen Methode aus.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X