Java - Извлечь часть строки между двумя специальными символами - PullRequest
20 голосов
/ 10 февраля 2011

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

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

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

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

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

Ответы [ 7 ]

31 голосов
/ 10 февраля 2011

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

'(.*?)"

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

"'(.*?)\""

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

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

Посмотрите, как оно работает в режиме онлайн: ideone

10 голосов
/ 10 февраля 2011

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

 String str= "21*90'89\"";
 String between = str.split("\"|'")[1];
4 голосов
/ 10 февраля 2011
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]
4 голосов
/ 10 февраля 2011

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

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

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

str.substring(0, str.indexOf("*"));
0 голосов
/ 28 декабря 2016
    String str="abc#defg@lmn!tp?pqr*tsd";               
    String special="!?@#$%^&*()/<>{}[]:;'`~";           
    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(" ");
    }
0 голосов
/ 11 февраля 2011

Мне не хватает простейшего возможного решения:

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

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

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

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

0 голосов
/ 10 февраля 2011
String str= 21*90'89;
String part= str.split("[*|']");
System.out.println(part[0] +""+part[1]);
...