文字列の括弧内の値を取得するにはどうすればよいですか?
String str= "United Arab Emirates Dirham (AED)";
AED テキストのみが必要です。
「AED」をコンパイルして出力します。複数の括弧でも機能します:
import java.util.regex.*;
public class Main
{
public static void main (String[] args)
{
String example = "United Arab Emirates Dirham (AED)";
Matcher m = Pattern.compile("\\(([^)]+)\\)").matcher(example);
while(m.find()) {
System.out.println(m.group(1));
}
}
}
正規表現は次のことを意味します。
\\(
: キャラクター(
(
: マッチグループの開始[
: これらの文字のいずれか^
: 次の文字ではありません)
: 前^
の では、これは「" を除くすべての文字」を意味します)
。+
:[]
セットから 1 つ以上のもの)
: マッチグループを停止\\)
: 文字通りの右括弧かっこ内で分割する方法がわかりません。高く評価されるのを手伝っていただけませんか
分割するときは正規表現を使用しているため、一部の文字は禁止されています。
あなたが探しているのは
str = str.split("[\\(\\)]")[1];
これは括弧で分割されます。(
またはで分割され)
ます。double\\
を使用して、正規表現用に予約されている文字である括弧をエスケープします。
で分割したい場合は、ドットをエスケープするためにも.
使用する必要があります。split("\\.")
これは機能します...
String str = "United Arab Emirates Dirham (AED)";
String answer = str.substring(str.indexOf("(")+1,str.indexOf(")"));
あなたは試すことができます:
String str = "United Arab Emirates Dirham (AED)";
int firstBracket = str.indexOf('(');
String contentOfBrackets = str.substring(firstBracket + 1, str.indexOf(')', firstBracket));
2 つの方法を提案できます。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args){
System.out.println(getParenthesesContent1("United Arab Emirates Dirham (AED)"));
System.out.println(getParenthesesContent2("United Arab Emirates Dirham (AED)"));
}
public static String getParenthesesContent1(String str){
return str.substring(str.indexOf('(')+1,str.indexOf(')'));
}
public static String getParenthesesContent2(String str){
final Pattern pattern = Pattern.compile("^.*\\((.*)\\).*$");
final Matcher matcher = pattern.matcher(str);
if (matcher.matches()){
return matcher.group(1);
} else {
return null;
}
}
}
はい、次のようなさまざまな手法を試すことができます
string.indexOf("(");
インデックスと使用法を取得する
string.substring(from, to)
正規表現の使用:
String text = "United Arab Emirates Dirham (AED)";
Pattern pattern = Pattern.compile(".* \\(([A-Z]+)\\)");
Matcher matcher = pattern.matcher(text);
if (matcher.matches()) {
System.out.println("found: " + matcher.group(1));
}
@Cœur からの回答はおそらく正しいですが、残念ながら私にはうまくいきませんでした。次のようなテキストがありました。
mrewrwegsg {text in between braces} njanfjaenfjie a {text in between braces}
ずいぶん大きくなりましたが、この短い部分だけ考えてみましょう。
このコードを使用して、ブレスレット間の各テキストを取得し、コンソールに出力しました。
Pattern p = Pattern.compile("\\{.*?\\}");
Matcher m = p.matcher(test);
while(m.find()) {
System.out.println(m.group().subSequence(1, m.group().length()-1));
}
@Cœurの回答よりも複雑かもしれませんが、私の回答が役立つと思う私のような人がいるかもしれません。
以下のメソッドは、'(. {. [, ), }, ]' のようなブラケット内の任意の文字列を分割できます。
public String getStringInsideChars(String original, char c){
this.original=original;
original = cleaning(original);
for(int i = 0; i < original.length(); i++){
if(original.charAt(i) == c){
String temp = original.substring(i + 1, original.length());
i = original.length();//end for
for(int k = temp.length() - 1; k >= 0; k--){
if(temp.charAt(k) == getReverseBracket(c)){
original = temp.substring(0, k);
k = -1; // end for
}
}
}
}
return original;
}
private char getReverseBracket(char c){
return c == '(' ? ')' :
c == '{' ? '}' :
c == '[' ? ']' :
c == ')' ? '(' :
c == '}' ? '{' :
c == ']' ? '[' : c;
}
public String cleaning(String original) {
this.original = original;
return original.replaceAll(String.valueOf('\t'), "").replaceAll(System.getProperty("line.separator"), "");
}
以下のように使用できます。
getStringInsideChars("{here is your string}", '{')
「ここにあなたの文字列があります」を返します