Проблемы с использованием выражений регулярного выражения для проверки IP [дубликат]

Поскольку статика инициализируется в порядке, указанном в исходном коде.

Проверьте это:

class MyClass {
  private static MyClass myClass = new MyClass();
  private static MyClass myClass2 = new MyClass();
  public MyClass() {
    System.out.println(myClass);
    System.out.println(myClass2);
  }
}

Это напечатает:

null
null
myClassObject
null

EDIT

Хорошо, давайте сделаем это более понятным.

  1. Статика инициализируется один за другим в порядке, указанном в исходном коде.
  2. Поскольку первая статика инициализирована перед остальной частью, во время ее инициализации остальные статические поля являются нулевыми или значениями по умолчанию.
  3. Во время инициализации второго статического элемента статическое значение является правильным, но остальное по-прежнему равно null или по умолчанию.

Является ли это ясно?

EDIT 2

Как указал Варман, ссылка на себя будет нулевой пока он инициализируется. Что имеет смысл, если вы думаете об этом.

21
задан Sri Sri 13 September 2010 в 06:41
поделиться

3 ответа

Если вы ориентируетесь на уровень API 8, вы можете использовать глобальное regex Patterns.IP_ADDRESS . Вы можете напрямую включить это регулярное выражение в свой проект, если вы нацеливаете устройство с помощью android & lt; 2.2:

private static final Pattern IP_ADDRESS
    = Pattern.compile(
        "((25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9])\\.(25[0-5]|2[0-4]"
        + "[0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1]"
        + "[0-9]{2}|[1-9][0-9]|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}"
        + "|[1-9][0-9]|[0-9]))");
Matcher matcher = IP_ADDRESS.matcher("127.0.0.1");
if (matcher.matches()) {
    // ip is correct
}
33
ответ дан Rorist 21 August 2018 в 09:38
поделиться
Patterns.IP_ADDRESS.matcher(url).matches();
22
ответ дан Artyom 21 August 2018 в 09:38
поделиться

Чтобы проверить IP-адрес при вводе, вы можете использовать это вместо:

private static final Pattern PARTIAl_IP_ADDRESS =
          Pattern.compile("^((25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]|[0-9])\\.){0,3}"+
                           "((25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]|[0-9])){0,1}$"); 

ipEditText.addTextChangedListener(new TextWatcher() {                       
    @Override public void onTextChanged(CharSequence s, int start, int before, int count) {}            
    @Override public void beforeTextChanged(CharSequence s,int start,int count,int after) {}            

    private String mPreviousText = "";          
    @Override
    public void afterTextChanged(Editable s) {          
        if(PARTIAl_IP_ADDRESS.matcher(s).matches()) {
            mPreviousText = s.toString();
        } else {
            s.replace(0, s.length(), mPreviousText);
        }
    }
});
16
ответ дан Graeme 21 August 2018 в 09:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: