Ian Vink
Ian Vink

Reputation: 68750

Java static instance creator?

I'd like to create a RegEx Pattern statically, but I think I have the syntax wrong?

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

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

Upvotes: 3

Views: 840

Answers (2)

aioobe
aioobe

Reputation: 421030

You need to put the noHREF variable as a static member variable of your class.

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

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

In the code you wrote in your question, the noHREF variable is imply a local (temporary) variable whose scope is between static { and }.

Upvotes: 3

mdma
mdma

Reputation: 57707

When you declare

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

This is an anonymous static method that is executed when the class is loaded, and the noHREF declaration is a local variable in that method, and not a static field as you are expected. To get a static field, use the declaration

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

This will then allow you to access noHREF from a static method.

Upvotes: 2

Related Questions