Java-Извлечение части строки между двумя специальными символами

Я пытался выяснить, как извлечь часть строки между двумя специальными символами »и« Я искал регулярное выражение, но, честно говоря, я не могу этого понять.
Пример в Java-коде:

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

Я хотел бы вытащить 89

В общем, я просто хотел бы узнать, как извлечь часть строки между двумя конкретными символами, пожалуйста.

Также было бы неплохо узнать, как извлечь часть строки от начала до определенного символа, например, чтобы получить 21.

Попробуйте это регулярное выражение:

 '(.*?)" 

В качестве строкового литерала Java вам придется написать его следующим образом:

 "'(.*?)\"" 

Вот более полный пример, демонстрирующий, как использовать это регулярное выражение с помощью Matcher :

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

Смотрите, как работает онлайн: ideone

Если у вас всегда будет такая строка (с 3 частями), то этого достаточно:

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

Другой вариант, если вы можете заверить, что ваши строки всегда будут в том формате, который вы предоставляете, вы можете использовать быстрое и грязное решение substring / indexOf:

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

И чтобы получить вторую часть данных, которую вы просили:

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

Это то, что вы ищете … Программа, описанная выше, дает:

 [21, 90, 89] 

Я пропустил самое простое решение здесь:

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

Это решение является самым коротким, однако оно имеет некоторые недостатки:

  • Если строка выглядит иначе, вы получите всю строку обратно без предупреждения.
  • Это не очень эффективно, поскольку используемое регулярное выражение компилируется для каждого использования.

Я бы не использовал его, кроме как быстрого взлома, или если бы я мог быть действительно уверен в формате ввода.

  String str="abc#[email protected]!tp?pqr*tsd"; String special="[email protected]#$%^&*()/<>{}[]:;'`~"; 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]); 
  • Как избежать символа буквенного процента, когда включена опция NO_BACKSLASH_ESCAPES?
  • Какие символы нужно избегать при использовании Bash?
  • Преобразование символов, акцентированных букв на английский алфавит
  • Как избежать специальных символов, например, в sqlite в android
  • Давайте будем гением компьютера.