Mám takýto reťazec:
String line="[x1,x2,x3]";
Chcem z reťazca odstrániť obe hranaté zátvorky (nahradiť ich prázdnym reťazcom). Skúsil som to takto:
String x=line.replace("[","").replace("]","");
Existuje efektívnejší spôsob ako tento?
odpovede:
2 pre odpoveď č. 1Reťazec je nemenný, takže môžete
String x = line.replace("[","").replace("]","");
ďalším efektívnejším spôsobom je použitie regulárneho vzoru so vzorom pre obidva typy [ a ]
Páči sa mi to
String x = line.replaceAll("[\]\[]+", "");
2 pre odpoveď č. 2
Môžete použiť .replaceAll
ak chcete na odstránenie oboch použiť regulárny výraz [
a ]
v rovnakom čase kdekoľvek vo vnútri reťazca (v skutočnosti ekvivalent útržku kódu dvoch riadkov OP):
String x = line.replaceAll("[\]\[]+", "");
Na [][]+
vzor sa zhoduje s jedným alebo viacerými (+
) [
alebo ]
znaky (tieto musia byť vo vnútri uniknuté) [....]
, znaková trieda).
String line="[x1,x2,x3]";
String x = line.replaceAll("[\[\]]+", "");
System.out.println(x);
// => x1,x2,x3
1 pre odpoveď č. 3
Ak sú zátvorky vždy prítomné a vždy na začiatku a na konci reťazca, ako je to znázornené v príklade, stačí použiť substring
:
String x2 = line.substring(1, line.length()-1);
0 pre odpoveď č. 4
Inač:
line = line.substring(1, line.length()-1);
Ak chcete zachovať hranaté zátvorky, ktoré sa nachádzajú medzi tým, môžete použiť:
String line="[x1,[x2],x3]";
line = line.replaceAll("^\[(.*)\]$", "$1");
Výkon
x1,[x2],x3
0 pre odpoveď č. 5
Ak sa zátvorky môžu objaviť iba na začiatku a na konci reťazca, použila by sa najrýchlejšia metóda (z hľadiska výkonu) substring
ktoré nezahŕňa regulárne výrazy.
Ak sú zaručené zátvorky:
line = line.substring(1, line.length()-1);
Ak sú zátvorky voliteľné:
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);
}