Переписать RegEx для использования в Java

В Java, когда оператор «==» используется для сравнения двух объектов, он проверяет, ссылаются ли объекты на одно и то же место в памяти. Другими словами, он проверяет, являются ли имена двух объектов в основном ссылками на одно и то же место в памяти.

Класс Java String фактически переопределяет реализацию equals () по умолчанию в классе Object и переопределяет этот метод, чтобы он проверял только значения строк, а не их местоположения в памяти. Это означает, что если вы вызываете метод equals () для сравнения двух объектов String, то, пока действительная последовательность символов равна, оба объекта считаются равными.

Оператор == проверяет, являются ли две строки точно одним и тем же объектом.

Метод .equals() проверяет, имеют ли две строки одно и то же значение.

1
задан Wai Ha Lee 11 March 2019 в 01:57
поделиться

2 ответа

Метод matches() проверяет полное совпадение строк, поэтому вместо этого используйте метод find() , который проверяет соответствие подпоследовательности. Наконец, вы можете использовать метод group() для получения подходящей строки подпоследовательности.

public static void main(String[] args) {
Pattern pattern = Pattern.compile("(?<=pp_).*(?=')");
String input = "['newPage', 'pp_vii', -1])";
Matcher m = pattern.matcher(input);
boolean a = m.find(); 

if(a){
    String out = m.group();
    System.out.println("Match : " + out);
}
0
ответ дан Pranav C Balan 11 March 2019 в 01:57
поделиться

С твоим Регексом все в порядке. Метод Matcher.matches() возвращает true, только если полная строка соответствует шаблону ( документы ). Вместо этого вы должны использовать Matcher.find(). Это находит следующую подпоследовательность, которая соответствует шаблону ( документы ).

Pattern pattern = Pattern.compile("(?<=pp_).*(?=')");
String input = "['newPage', 'pp_vii', -1])";
Matcher m = pattern.matcher(input);
boolean stringMatches = m.matches(); // false
boolean isThereMatch = m.find(); // true
System.out.println(isThereMatch + " " + stringMatches);
System.out.println(m.group());

Что печатает:

true false
vii
0
ответ дан Samuel Philipp 11 March 2019 в 01:57
поделиться
Другие вопросы по тегам:

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