Як видалити перший і останній символ рядка?


78

Я працював у повідомленні SOAP, щоб отримати LoginToken від Webservice, і зберегти LoginToken у рядку та використовуватися System.out.println(LoginToken);для друку. Це друкує [wdsd34svdf], але я хочу лише wdsd34svdf, як видалити квадратну дужку. будь-хто допоможе мені.

Дякую

Приклад:

String LoginToken=getName().toString();
System.out.println("LoginToken" + LoginToken);

Результат: [wdsd34svdf] Я хочу wdsd34svdf


11
Ці запитання абсолютно не свідчать про зусилля
Dexygen

3
Правильно, але зараз є ще одна відповідь copy-paste для ледачих програмістів, які просять Google про подібні речі :)
Том,

1
Цікаво, чому це питання має стільки голосів проти?
Садда Хуссейн,

Відповіді:


177

Це легко, вам потрібно знайти індекс [та], а потім підрядок. (Тут [завжди на початку і] в кінці),

String loginToken = "[wdsd34svdf]";
System.out.println( loginToken.substring( 1, loginToken.length() - 1 ) );

1
Мені подобається, що ти починаєш своє речення з: "Це легко" ... :) Думаю, все легко, коли ти це знаєш .. все-таки мені допомогло
daniel_aren

8
Це має бути loginToken.length () - 2, щоб видалити кінцеву дужку.
mga911

7
@ mga911 Як я вже згадував у своїй відповіді, параметром 'substring (beginIndex, endIndex)' повинні бути відповідно '1' та 'loginToken.length () - 1' (індекс [та]). Перший параметр є інклюзивним, а другий параметр ексклюзивним. Наведений вище код дає мені правильний результат.
gtiwari333

я використовую (error.substring(2, error.length()-1))для видалення першої та останньої дужок!
Іман Мараші


14

Ви завжди можете використовувати substring:

String loginToken = getName().toString();
loginToken = loginToken.substring(1, loginToken.length() - 1);

7

Іншим рішенням цього питання є використання StringUtils.substringBetween(String str, String open, String close)методу commons-lang (починаючи з версії 2.0) . Головна перевага полягає в тому, що це нульова безпека експлуатації.

StringUtils.substringBetween("[wdsd34svdf]", "[", "]"); // returns wdsd34svdf


2
Це буде працювати для цього конкретного сценарію, але поверне "wdsd", якщо "[wdsd] 34svdf]" буде передано як перший параметр.
izilotti

5

У мене був подібний сценарій, і я думав, що щось на зразок

str.replaceAll("\[|\]", "");

виглядав чистішим. Звичайно, якщо у вашому маркері можуть бути дужки, це не спрацює.


1
зверніть увагу, що лише replaceAll () та replaceFirst () підтримують регулярний вираз, тому тут str.replaceAll ("\\ [| \\]", ""); буде працювати
rekinyz

1
Правильним виразом є щось на зразок str = str.replaceAll ("\ [| \]", ""); побачити відсутні у вашому виразі
Радж,

1

Таким чином ви можете видалити 1 провідний символ "[" та 1 завершальний "]" символ. Якщо ваш рядок не починається з "[" або закінчується на "]", він нічого не видалить:

str.replaceAll("^\\[|\\]$", "")

Ви тестували це? Можливо, я помиляюся, але це виглядає як "початок рядка, потім або [або], і кінець рядка". Чи не потрібні нам тут дужки?
YakovL

1
Так, це чудово працює: @Test public void testReplace () {String str = "[wdsd34svdf]"; str = str.replaceAll ("^ \ [| \] $", ""); assertTrue (str.equals ("wdsd34svdf")); }
Андрій Федотов

1

це чудово працює

String str = "[wdsd34svdf]";
//String str1 = str.replace("[","").replace("]", "");
String str1 = str.replaceAll("[^a-zA-Z0-9]", "");
System.out.println(str1);


String strr = "[wdsd(340) svdf]";
String strr1 = str.replaceAll("[^a-zA-Z0-9]", "");
System.out.println(strr1);

Я думаю, що в наступному до останнього рядка коду є помилка. Думаю, ви мали намір сказати strr.replaceAll(...)замість str.replaceAll(...) (Замінити str на strr )
Someowngeek

0

StringUtils's removeStart іremoveEnd метод допомагає видалити рядок з початку і кінця рядка.

У цьому випадку ми могли б також використовувати комбінацію цих двох методів

String string = "[wdsd34svdf]";
System.out.println(StringUtils.removeStart(StringUtils.removeEnd(string, "]"), "["));

0

РІШЕННЯ 1

def spaceMeOut (str1):

   print(str1[1:len(str1)-1])

str1 = 'Привіт'

print (spaceMeOut (str1))

РІШЕННЯ 2

def spaceMeOut (str1):

  res=str1[1:len(str1)-1]

  print('{}'.format(res))

str1 = 'Привіт'

print (spaceMeOut (str1))


1
Будь ласка, детальніше розкажіть про різницю між вашими рішеннями та про те, чому в ОП буде використовуватися те чи інше.
sao

0

У Котліні

private fun removeLastChar(str: String?): String? {
    return if (str == null || str.isEmpty()) str else str.substring(0, str.length - 1)
}

0

Спробуйте це, щоб видалити першу та останню дужки рядка напр. [1,2,3]

String s =str.replaceAll("[", "").replaceAll("]", "");

Очікуваний результат = 1,2,3


-1

Ця воля дає вам основну ідею

    String str="";
    String str1="";
    Scanner S=new Scanner(System.in);
    System.out.println("Enter the string");
    str=S.nextLine();
    int length=str.length();
    for(int i=0;i<length;i++)
    {
        str1=str.substring(1, length-1);
    }
    System.out.println(str1);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.