/ Ako efektívne nahradiť znaky v reťazci - java, string

Ako efektívne nahradiť znaky v reťazci String - java

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ď č. 1

Reť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).

Java demo:

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);
}