Java- Extrai parte de uma string entre dois caracteres especiais

Eu tenho tentado descobrir como extrair uma parte de uma string entre dois caracteres especiais e “Eu tenho procurado na regex, mas francamente eu não consigo entender isso.
Exemplo no código Java:

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

Eu gostaria de retirar 89

Em geral, gostaria apenas de saber como extrair parte de uma string entre dois caracteres específicos, por favor.

Também seria bom saber como extrair parte da string desde o início até um caractere específico como obter 21.

Tente esta expressão regular:

 '(.*?)" 

Como um literal de string Java, você terá que escrevê-lo da seguinte maneira:

 "'(.*?)\"" 

Aqui está um exemplo mais completo demonstrando como usar essa expressão regular com um Matcher :

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

Veja trabalhando on-line: ideone

Se você sempre terá uma string como essa (com 3 partes), então isso é suficiente:

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

Outra opção, se você puder garantir que suas strings estarão sempre no formato que você fornece, você pode usar uma solução substring / indexOf rápida e suja:

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

E para obter o segundo pedaço de dados que você pediu:

 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)); } 

É o que você está procurando … O programa descrito acima produz:

 [21, 90, 89] 

Eu estou perdendo a solução mais simples possível aqui:

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

Esta solução é de longe a mais curta, mas tem algumas desvantagens:

  • Caso a string pareça diferente, você recupera toda a string sem avisar.
  • Não é muito eficiente, pois o regex usado é compilado para cada uso.

Eu não usaria isso, exceto como um hack rápido ou se eu pudesse ter certeza sobre o formato de input.

  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]);