Подтвердить что ты не робот

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

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

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

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

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

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

4b9b3361

Ответ 1

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

'(.*?)"

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

"'(.*?)\""

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

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

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

Ответ 2

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

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

Ответ 3

Другой вариант, если вы можете заверить, что ваши строки всегда будут в том формате, который вы предоставляете, вы можете использовать быстрое и грязное решение подстроки /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]

Ответ 5

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

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

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

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

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

Ответ 6

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

Ответ 7

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