Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java static instance creator?

Tags:

java

static

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.....
like image 908
Ian Vink Avatar asked Sep 22 '26 13:09

Ian Vink


2 Answers

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 }.

like image 123
aioobe Avatar answered Sep 24 '26 02:09

aioobe


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.

like image 20
mdma Avatar answered Sep 24 '26 02:09

mdma