2010-10-05 41 views
34

¿Cuál es la expresión regular de. y ...?expresión regular para DOT

if(key.matches(".")) { 

do something 

} 

Las coincidencias aceptan cadenas que solicitan una expresión regular. Ahora necesito eliminar todos los DOT dentro de mi MAP.

Respuesta

58

. coincide con cualquier carácter tanto necesita escapar decir \. o \\. dentro de una cadena de Java (porque \ en sí tiene un significado especial dentro de cadenas de Java.)

continuación, puede utilizar \.\. o \.{2} a coincidir exactamente con 2 puntos.

+1

\. no funciona con el código anterior en key.matches – John

+7

Como se mencionó, '\ .' es la expresión regular, pero para construir una cadena para esta expresión en Java necesitará' \\. 'porque \ se usa dentro de cadenas Java para cosas como \ n, \ t etc. entonces \\ es necesario para un literal \ dentro de una Cadena. Además, tenga en cuenta que 'String.matches' requiere la expresión regular para que coincida con la ** cadena ** completa. Si desea hacer una búsqueda de subcadenas, necesitará usar 'Matcher.find' – mikej

+3

Además, ¿puede aclarar un poco los requisitos? Si solo necesita comprobar si la clave contiene un punto, puede usar 'key.contains' y realmente no necesita una expresión regular. – mikej

8

...

[.]{1} 

o

[.]{2} 

?

+0

solo punto es que todos los personajes no creen? –

4

[+ * ?.] La mayoría de los caracteres especiales no tienen significado dentro de los corchetes. Esta expresión coincide con cualquiera de +, *,? o el punto.

3

Use String.Replace() si solo quiere reemplazar los puntos de la cadena. Alternativa sería usar Pattern-Matcher con StringBuilder, esto le da más flexibilidad ya que puede encontrar grupos que están entre puntos. Si usa este último, le recomendaría que ignore las entradas vacías con "\\.+".

public static int count(String str, String regex) { 
    int i = 0; 
    Pattern p = Pattern.compile(regex); 
    Matcher m = p.matcher(str); 
    while (m.find()) { 
     m.group(); 
     i++; 
    } 
    return i; 
} 

public static void main(String[] args) { 
    int i = 0, j = 0, k = 0; 
    String str = "-.-..-...-.-.--..-k....k...k..k.k-.-"; 

    // this will just remove dots 
    System.out.println(str.replaceAll("\\.", "")); 
    // this will just remove sequences of ".." dots 
    System.out.println(str.replaceAll("\\.{2}", "")); 
    // this will just remove sequences of dots, and gets 
    // multiple of dots as 1 
    System.out.println(str.replaceAll("\\.+", "")); 

    /* for this to be more obvious, consider following */ 
    System.out.println(count(str, "\\.")); 
    System.out.println(count(str, "\\.{2}")); 
    System.out.println(count(str, "\\.+")); 
} 

La salida será:

--------kkkkk-- 
-.--.-.-.---kk.kk.k-.- 
--------kkkkk-- 
21 
7 
11 
1

Debe utilizar no contiene partidos

if(nom.contains(".")) 
    System.out.println("OK"); 
else 
    System.out.println("Bad");