Java- Extrae parte de una cadena entre dos caracteres especiales

He estado tratando de encontrar la forma de extraer una parte de una cadena entre dos caracteres especiales y “he estado buscando expresiones regulares, pero francamente no puedo entenderlo”.
Ejemplo en código Java:

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

Me gustaría 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 hasta un personaje específico como obtener 21.

Prueba esta expresión regular:

 '(.*?)" 

Como un literal de cadena de Java, tendrá que escribirlo de la siguiente manera:

 "'(.*?)\"" 

Aquí hay un ejemplo más completo que demuestra cómo usar 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)); } 

Véalo trabajar en línea: ideone

Si siempre tendrá una cadena como esa (con 3 partes), entonces esto es suficiente:

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

Otra opción, si puede asegurar que sus cadenas siempre estarán en el formato que proporciona, puede usar una solución subserie / indexOf rápida y sucia:

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

Y para obtener la segunda información que solicitó:

 str.substring(0, str.indexOf("*")); 
 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ás buscando … El progtwig descrito anteriormente produce:

 [21, 90, 89] 

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, recuperas toda la cadena sin previo aviso.
  • No es muy eficiente, ya que la expresión regular utilizada se comstack para cada uso.

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

  String str="abc#defg@lmn!tp?pqr*tsd"; String special="!?@#$%^&*()/<>{}[]:;'`~"; ArrayList al=new ArrayList(); for(int i=0;i 
 String str= 21*90'89; String part= str.split("[*|']"); System.out.println(part[0] +""+part[1]);