web-dev-qa-db-ja.com

Java-2つの特殊文字の間の文字列の一部を抽出する

私は2つの特殊文字 'と "の間の文字列の一部を抽出する方法を見つけようとしましたが、正規表現を調べてきましたが、率直に言って理解できません。
Javaコードの例:

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

89を引き出したい

一般に、2つの特定の文字の間の文字列の一部を抽出する方法を知りたいだけです。

また、文字列の先頭から特定の文字までの一部を抽出して21を取得する方法を知っていると便利です。

21
bryan

この正規表現を試してください:

'(.*?)"

Java文字列リテラルとして、次のように記述する必要があります。

"'(.*?)\""

Matcherでこの正規表現を使用する方法を示すより完全な例は次のとおりです。

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

オンラインで動作することを確認してください: ideone

31
Mark Byers

常にそのような文字列(3つの部分)がある場合は、これで十分です:

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

別のオプションとして、文字列が常に指定した形式になることを保証できる場合は、迅速で汚れたsubstring/indexOfソリューションを使用できます。

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

そして、あなたが求めた2番目のデータを取得するには:

str.substring(0, str.indexOf("*"));
5
Rob Hruska
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
chahuistle
    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

私はここで可能な限り簡単な解決策を逃しています:

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

このソリューションは群を抜いて最短ですが、いくつかの欠点があります。

  • 文字列が異なって見える場合、警告なしで文字列全体を取得します。
  • 使用される正規表現は使用ごとにコンパイルされるため、あまり効率的ではありません。

クイックハックとして、または入力フォーマットについて本当に確信できる場合を除いて、私はそれを使用しません。

0
maaartinus