У мене є така рядок:
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 [][]+
візерунок відповідає одній або більше (+
) [
або ]
символи (їх потрібно уникати всередині [....]
, клас персонажів).
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);
}