Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Diferencia entre lookingAt y find

Buenos días;

Dado el ejemplo
private static final String REGEX = "abc";
private static final String INPUT = "abcoooooooooo";
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());
System.out.println("find(): " + matcher.find());

}
}

El método find() me devuelve FALSE, pero si cambio INPUT = "abcoooooooooo"; por INPUT = "abcabcooooooo"; me devuelve TRUE. ¿Por qué? ¿Tiene que habar más de una concordancia para que el método find() sea TRUE?

Un saludo y gracias

agosto 9, 2014 | Unregistered CommenterJoice

Incluso poniendo private static final String REGEX = "(abc)";

agosto 9, 2014 | Unregistered CommenterJoice

Esa "inconsistencia" se debe a que previamente llamas a lookingAt()), por lo que si no hay otro substring después del encontrado, find() devolverá false.
Por esa razón, cuando haces esa modificación, y añades otra cadena abc, find() sí devuelve el valor true.
Si llamas a find() antes de lookingAt() verás que devuelve true.

http://docs.oracle.com/javase/7/docs/api/java/util/regex/Matcher.html#find()

"A matcher is created from a pattern by invoking the pattern's matcher method. Once created, a matcher can be used to perform three different kinds of match operations:

The matches method attempts to match the entire input sequence against the pattern.

The lookingAt method attempts to match the input sequence, starting at the beginning, against the pattern.

The find method scans the input sequence looking for the next subsequence that matches the pattern."

agosto 9, 2014 | Registered Commenterchoces