2011-02-10 35 views
18

He estado tratando de descubrir cómo extraer una parte de una cadena entre dos caracteres especiales 'y "He estado buscando expresiones regulares, pero francamente no puedo entenderlo .
Ejemplo de código Java:Java- Extracto de una cadena entre dos caracteres especiales

String str="21*90'89\""; 

me gustaría que sacar 89

en general me gustaría saber cómo extraer parte de una cadena entre dos caracteres específicos, por favor

.

También sería bueno saber cómo extraer parte de la cadena desde el principio a un carácter específico gustaría estar 21.

+0

Solo un segundo ... para sacar 89? ¿Quieres decir 90, verdad? –

+0

Su código de ejemplo no es válido Java. ¿No te faltan algunas citas? –

+0

Ok, ahora que he visto el comentario de Mark, lo entiendo. La cita es parte de tu cadena. –

Respuesta

28

Pruebe esta expresión regular:

'(.*?)" 

Como Java cadena literal que tendrá que escribir como sigue:

"'(.*?)\"" 

Aquí es un ejemplo más completo que muestra cómo utilizar esta expresión regular con un Matcher:

Pattern pattern = Pattern.compile("'(.*?)\""); 
Matcher matcher = pattern.matcher(str); 
if (matcher.find()) { 
    System.out.println(matcher.group(1)); 
} 

ver su funcionamiento en línea: ideone

+0

Gracias por la ayuda funciona como un amuleto – bryan

+0

no funciona cuando 'se repite, es decir,' 21 * 90'90'89 \" ", devolvió" 90'9089 " –

10

Si usted siempre tendrá una cadena así (con 3 partes), entonces esto es suficiente:

String str= "21*90'89\""; 
String between = str.split("\"|'")[1]; 
4

Otra opción, si se puede asegurar que sus cadenas siempre estará en el formato que usted proporciona, puede utilizar una solución subcadena/indexOf rápido y sucio-:

str.substring(str.indexOf("'") + 1, str.indexOf("\"")); 

y para obtener la segunda pieza de información que solicitó:

str.substring(0, str.indexOf("*")); 
4
public static void main(final String[] args) { 
    final String str = "21*90'89\""; 
    final Pattern pattern = Pattern.compile("[\\*'\"]"); 
    final String[] result = pattern.split(str); 
    System.out.println(Arrays.toString(result)); 
} 

es lo que está buscando ... El programa descrito anteriormente produce:

[21, 90, 89] 
+0

Esto es exactamente lo que necesitaba, aunque mi pregunta no lo hizo parecer ... muchas gracias – bryan

-2
String str= 21*90'89; 
String part= str.split("[*|']"); 
System.out.println(part[0] +""+part[1]); 
+0

-1: A) no compila, B) @Goran Jovic respondió esencialmente el Lo mismo sobre 11 minutos antes, C) imprime "2189", que no parece ser lo que el OP está buscando –

0

me falta la solución más simple posible aquí:

str.replaceFirst(".*'(.*)\".*", "$1"); 

Esta solución es con mucho la más corta, sin embargo tiene algunos inconvenientes:

  • En caso de que la cuerda se vea diferente, recuperará toda la cadena sin previo aviso.
  • No es muy eficiente, ya que la expresión regular utilizada se compila para cada uso.

No lo usaría excepto como un truco rápido o si pudiera estar realmente seguro sobre el formato de entrada.

0
String str="abc#[email protected]!tp?pqr*tsd";    
    String special="[email protected]#$%^&*()/<>{}[]:;'`~";   
    ArrayList<Integer> al=new ArrayList<Integer>();   
    for(int i=0;i<str.length();i++) 
    { 
     for(int j=0;j<special.length();j++) 
      if(str.charAt(i)==special.charAt(j))   
       al.add(i); 
    } 
    for(int i=0;i<al.size()-1;i++) 
    { 
     int start=al.get(i); 
     int end=al.get(i+1); 
     for(int j=start+1;j<end;j++) 
      System.out.print(str.charAt(j)); 
     System.out.print(" "); 
    } 
Cuestiones relacionadas