Spec-Zone .ru
спецификации, руководства, описания, API
|
Этот раздел описывает некоторые дополнительные полезные методы Matcher
class. Для удобства упомянутые ниже методы группируются согласно функциональности.
Индексируйте методы, обеспечивают полезный, индексируют значения, которые показывают точно, где соответствие было найдено в строке ввода:
public int start()
: Возвращается запуск индексируют предыдущего соответствия.public int start(int group)
public int end()
public int end(int group)
Методы исследования рассматривают строку ввода и возвращают булево указание, находится ли образец.
public boolean lookingAt()
public boolean find()
public boolean find(int start)
public boolean matches()
Заменяющие методы являются полезными методами для того, чтобы заменить текст в строке ввода.
public Matcher appendReplacement(StringBuffer sb, String replacement)
public StringBuffer appendTail(StringBuffer sb)
public String replaceAll(String replacement)
public String replaceFirst(String replacement)
public static String quoteReplacement(String s)
String
для указанного String
. Этот метод производит a String
это будет работать литеральной заменой s
в appendReplacement
метод Matcher
class. String
произведенный будет соответствовать последовательность символов в s
обработанный как литеральная последовательность. Наклонные черты ('\'
) и знаки доллара ('$'
) не будет дан особого значения.start
и end
МетодыВот пример, MatcherDemo.java
, это считает число раз, слово "собака" появляется в строке ввода.
import java.util.regex.Pattern; import java.util.regex.Matcher; public class MatcherDemo { private static final String REGEX = "\\bdog\\b"; private static final String INPUT = "dog dog dog doggie dogg"; public static void main(String[] args) { Pattern p = Pattern.compile(REGEX); // get a matcher object Matcher m = p.matcher(INPUT); int count = 0; while(m.find()) { count++; System.out.println("Match number " + count); System.out.println("start(): " + m.start()); System.out.println("end(): " + m.end()); } } }
OUTPUT: Match number 1 start(): 0 end(): 3 Match number 2 start(): 4 end(): 7 Match number 3 start(): 8 end(): 11
Можно видеть, что этот пример использует границы слова, чтобы гарантировать что буквы "d" "o" "g"
не просто подстрока в более длительном слове. Это также дает немного полезной информации о том, где в строке ввода соответствие произошло. start
метод возвращается, запуск индексируют подпоследовательности, полученной данной группой во время предыдущей работы соответствия, и end
возвращает индексирование соответствующего последнего знака, плюс один.
matches
и lookingAt
Методы matches
и lookingAt
методы обе попытки соответствовать входную последовательность против образца. Различие, однако, является этим matches
требует, чтобы вся входная последовательность была соответствующей, в то время как lookingAt
не делает. Оба метода всегда запускаются в начале строки ввода. Вот полный код, MatchesLooking.java
:
import java.util.regex.Pattern; import java.util.regex.Matcher; public class MatchesLooking { private static final String REGEX = "foo"; private static final String INPUT = "fooooooooooooooooo"; private static Pattern pattern; private static Matcher matcher; public static void main(String[] args) { // Initialize pattern = Pattern.compile(REGEX); matcher = pattern.matcher(INPUT); System.out.println("Current REGEX is: " + REGEX); System.out.println("Current INPUT is: " + INPUT); System.out.println("lookingAt(): " + matcher.lookingAt()); System.out.println("matches(): " + matcher.matches()); } }
Current REGEX is: foo Current INPUT is: fooooooooooooooooo lookingAt(): true matches(): false
replaceFirst(String)
и replaceAll(String)
replaceFirst
и replaceAll
методы заменяют текст, который соответствует данное регулярное выражение. Поскольку их имена указывают, replaceFirst
заменяет первое возникновение, и replaceAll
замены все происшествия. Вот ReplaceDemo.java
код:
import java.util.regex.Pattern; import java.util.regex.Matcher; public class ReplaceDemo { private static String REGEX = "dog"; private static String INPUT = "The dog says meow. All dogs say meow."; private static String REPLACE = "cat"; public static void main(String[] args) { Pattern p = Pattern.compile(REGEX); // get a matcher object Matcher m = p.matcher(INPUT); INPUT = m.replaceAll(REPLACE); System.out.println(INPUT); } }
OUTPUT: The cat says meow. All cats say meow.
В этой первой версии, всех возникновениях dog
заменяются cat
. Но почему остановка здесь? Вместо того, чтобы заменять простой литерал как dog
, можно заменить текст, который соответствует любое регулярное выражение. API для этого метода утверждает что "данный регулярное выражение a*b
, ввод aabfooaabfooabfoob
, и заменяющая строка -
, вызов этого метода на matcher для того выражения привел бы к строке -foo-foo-foo-
."
Вот ReplaceDemo2.java
код:
import java.util.regex.Pattern; import java.util.regex.Matcher; public class ReplaceDemo2 { private static String REGEX = "a*b"; private static String INPUT = "aabfooaabfooabfoob"; private static String REPLACE = "-"; public static void main(String[] args) { Pattern p = Pattern.compile(REGEX); // get a matcher object Matcher m = p.matcher(INPUT); INPUT = m.replaceAll(REPLACE); System.out.println(INPUT); } }
OUTPUT: -foo-foo-foo-
Чтобы заменить только первое возникновение образца, просто вызовите replaceFirst
вместо replaceAll
. Это принимает тот же самый параметр.
appendReplacement(StringBuffer,String)
и appendTail(StringBuffer)
Matcher
class также обеспечивает appendReplacement
и appendTail
методы для текстовой замены. Следующий пример, RegexDemo.java
, использование эти два метода, чтобы достигнуть того же самого эффекта как replaceAll
.
import java.util.regex.Pattern; import java.util.regex.Matcher; public class RegexDemo { private static String REGEX = "a*b"; private static String INPUT = "aabfooaabfooabfoob"; private static String REPLACE = "-"; public static void main(String[] args) { Pattern p = Pattern.compile(REGEX); Matcher m = p.matcher(INPUT); // get a matcher object StringBuffer sb = new StringBuffer(); while(m.find()){ m.appendReplacement(sb,REPLACE); } m.appendTail(sb); System.out.println(sb.toString()); } }
OUTPUT: -foo-foo-foo-
java.lang.String
Для удобства, String
class подражает нескольким Matcher
методы также:
public String replaceFirst(String regex, String replacement)
: Заменяет первую подстроку этой строки, которая соответствует данное регулярное выражение с данной заменой. Вызов этого метода формы str.replaceFirst(regex, repl)
урожаи точно тот же самый результат как выражение Pattern.compile(regex).matcher(str).replaceFirst(repl)
public String replaceAll(String regex, String replacement)
str.replaceAll(regex, repl)
урожаи точно тот же самый результат как выражение Pattern.compile(regex).matcher(str).replaceAll(repl)