2010-08-13 2 views

ответ

3

Вы должны поместить переменную noHREF в качестве переменных статического члена вашего класса.

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

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

В коде вы написали в своем вопросе, переменная noHREF это означает, локальный (временный) переменную, сфера между static { и }.

2

При объявлении

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

Это анонимный статический метод, который выполняется при загрузке класса, и объявление noHREF является локальной переменной в этом методе, а не статическое поле, как вы, как ожидается, , Чтобы получить статическое поле, используйте объявление

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

Это позволит вам получить доступ к noHREF из статического метода.

+0

Хотя ваша информация в целом правильная, это статический блок инициализатора, а не анонимный статический метод. Аналогичным образом можно создать блок инициализатора экземпляра (опустить «статические», сохранить фигурные скобки). Целью инициализационных блоков является инициализация/создание экземпляров полей класса, в частности, когда требуется большее, чем простое назначение для достижения правильных значений. –

Смежные вопросы