2010-08-13 5 views
3

Je voudrais créer un motif RegEx statiquement, mais je pense que j'ai la syntaxe erronée?Créateur d'instance statique Java?

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

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

Répondre

3

Vous devez mettre la variable noHREF comme une variable membre statique de votre classe.

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

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

Dans le code que vous avez écrit dans votre question, la variable est nohref implique une variable locale (temporaire) dont la portée est entre static { et }.

2

Lorsque vous déclarez

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

Ceci est une méthode statique anonyme qui est exécutée lorsque la classe est chargée, et la déclaration nohref est une variable locale dans cette méthode, et non un champ statique que vous attendiez . Pour obtenir un champ statique, utilisez la déclaration

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

Cela vous permettra alors d'accéder à noHREF à partir d'une méthode statique.

+0

Bien que vos informations soient généralement correctes, il s'agit d'un bloc d'initialisation statique et non d'une méthode statique anonyme. Vous pouvez également créer un bloc d'initialisation d'instance (omettez le static, gardez les accolades). L'intention des blocs d'initialisation est d'initialiser/instancier les champs de la classe, en particulier lorsque plus qu'une simple affectation est nécessaire pour atteindre les valeurs correctes. –