私は2つの特殊文字 'と "の間の文字列の一部を抽出する方法を見つけようとしましたが、正規表現を調べてきましたが、率直に言って理解できません。
Javaコードの例:
String str="21*90'89\"";
89を引き出したい
一般に、2つの特定の文字の間の文字列の一部を抽出する方法を知りたいだけです。
また、文字列の先頭から特定の文字までの一部を抽出して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("\""));
そして、あなたが求めた2番目のデータを取得するには:
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]
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(" ");
}
私はここで可能な限り簡単な解決策を逃しています:
str.replaceFirst(".*'(.*)\".*", "$1");
このソリューションは群を抜いて最短ですが、いくつかの欠点があります。
クイックハックとして、または入力フォーマットについて本当に確信できる場合を除いて、私はそれを使用しません。