/ / Як ефективно замінити символи в рядку - java, string

Як ефективно замінити символи в String - java, string

У мене є така рядок:

String line="[x1,x2,x3]";

Я хочу видалити обидва квадратних дужки з рядка (замінити їх порожнім рядком). Я спробував це так:

 String x=line.replace("[","").replace("]","");

Чи є більш ефективний спосіб, ніж цей?

Відповіді:

2 для відповіді № 1

Рядок незмінний, щоб ви могли

String x = line.replace("[","").replace("]","");

Ще один більш ефективний спосіб - використання регулярного виразів з малюнком для обох [ і ]

люблю

String x = line.replaceAll("[\]\[]+", "");

2 для відповіді № 2

Ви можете використовувати .replaceAll якщо ви хочете скористатися регулярним виразом для видалення обох [ і ] в той самий час де завгодно всередині рядка (власне, еквівалент фрагмента рядкового коду OP):

String x = line.replaceAll("[\]\[]+", "");

The [][]+ візерунок відповідає одній або більше (+) [ або ] символи (їх потрібно уникати всередині [....], клас персонажів).

Демонстрація Java:

String line="[x1,x2,x3]";
String x = line.replaceAll("[\[\]]+", "");
System.out.println(x);
// => x1,x2,x3

1 для відповіді № 3

Якщо дужки завжди присутні, і завжди на початку та в кінці рядка, як показано в прикладі, ви можете просто використовувати substring:

String x2 = line.substring(1, line.length()-1);

0 для відповіді № 4

Інший спосіб:

line = line.substring(1, line.length()-1);

Якщо ви хочете зберегти квадратні дужки, що знаходяться між ними, ви можете використовувати:

String line="[x1,[x2],x3]";
line = line.replaceAll("^\[(.*)\]$", "$1");

Вихідні дані

x1,[x2],x3

0 для відповіді № 5

Якщо дужки можуть з’являтися лише на початку та в кінці рядка, найшвидшим методом (з точки зору продуктивності) буде використання 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);
}