私はこのような文字列を持っています:
String line="[x1,x2,x3]";
両方の角かっこを文字列から削除します(空の文字列に置き換えます)。私はこのようにしてみました:
String x=line.replace("[","").replace("]","");
これよりも効率的な方法はありますか?
回答:
回答№1は2文字列は不変なので、次のことができます。
String x = line.replace("[","").replace("]","");
別のより効率的な方法は、両方のパターンで正規表現を使用することです [ そして ]
好きな
String x = line.replaceAll("[\]\[]+", "");
回答№2については2
あなたは使用することができます .replaceAll
正規表現を使用して両方を削除する場合 [
そして ]
同時に 文字列内のどこでも (実際には、OPの2行のコードスニペットに相当):
String x = line.replaceAll("[\]\[]+", "");
ザ [][]+
パターンは1つ以上に一致します(+
) [
または ]
文字(これらは内部でエスケープする必要があります [....]
、文字クラス)。
String line="[x1,x2,x3]";
String x = line.replaceAll("[\[\]]+", "");
System.out.println(x);
// => x1,x2,x3
回答№3の場合は1
ブラケットが常に存在し、例に示すように常に文字列の先頭と末尾にある場合は、単に使用できます substring
:
String x2 = line.substring(1, line.length()-1);
回答№4の場合は0
別の方法:
line = line.substring(1, line.length()-1);
間にある角括弧を保持する場合は、次を使用できます。
String line="[x1,[x2],x3]";
line = line.replaceAll("^\[(.*)\]$", "$1");
出力
x1,[x2],x3
回答№5の場合は0
ブラケットが文字列の最初と最後にしか表示されない場合、(パフォーマンスの観点から)最速の方法は substring
正規表現は含まれません。
ブラケットの存在が保証されている場合:
line = line.substring(1, line.length()-1);
括弧がオプションの場合:
int len = line.length();
int trimStart = (len > 0 && line.charAt(0) == "[") ? 1 : 0;
int trimEnd = (len > 0 && line.charAt(len-1) == "]") ? 1 : 0;
if (trimStart > 0 || trimEnd > 0) {
line = line.substring(trimStart, len - trimEnd);
}