2011-02-10 4 views
18

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

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

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

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

.

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

+0

Всего секунду .. вытащить 89? Вы имеете в виду 90, верно? –

+0

Ваш примерный код недействителен Java. Вам не хватает некоторых цитат? –

+0

Хорошо, теперь, когда я увидел комментарий Марка, я понял. Цитата является частью вашей строки. –

ответ

28

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

'(.*?)" 

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

"'(.*?)\"" 

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

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

Смотреть это работает онлайн: ideone

+0

Спасибо за помощь работает как шарм – bryan

+0

не работает, когда 'повторяется, то есть" 21 * 90'90'89 \ " ", вернулся" 90'9089 " –

10

Если вы всегда будете иметь строку типа, что (с 3-х частей), то этого достаточно:

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

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

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

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

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

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

[21, 90, 89] 
+0

Это на самом деле то, что мне нужно, хотя мой вопрос не сделал это так ... спасибо большое – bryan

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

-1: A) он не компилируется, B) @Goran Jovic ответил, по существу, то же самое примерно за 11 минут до этого, C) он печатает «2189», что не похоже на то, что ищет OP –

0

я пропускаю самое простое решение здесь:

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

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

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

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

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(" "); 
    } 
Смежные вопросы