Wie entferne ich das erste und letzte Zeichen einer Zeichenfolge?

75

Ich habe in SOAP-Nachrichten gearbeitet, um LoginToken vom Webservice abzurufen und das LoginToken in String zu speichern und System.out.println(LoginToken);zum Drucken zu verwenden. Dies druckt [wdsd34svdf], aber ich möchte nur wdsd34svdf, also wie man eckige Klammern entfernt. Bitte, jemand hilft mir.

Vielen Dank

Beispiel:

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

Ausgabe: [wdsd34svdf] Ich möchte wdsd34svdf

Sampath Kumar
quelle
11
Diese Frage zeigt absolut keinen Forschungsaufwand
Dexygen
3
Das ist richtig, aber jetzt gibt es noch eine Antwort zum Kopieren und Einfügen für faule Programmierer, die Google nach solchen Dingen fragen :)
Tom
1
Ich frage mich, warum diese Frage so viele positive Stimmen hat.
Sadda Hussain

Antworten:

174

Es ist einfach. Sie müssen den Index von [und] und dann den Teilstring finden. (Hier [ist immer am Anfang und] ist am Ende),

String loginToken="[wdsd34svdf]";
System.out.println(loginToken.substring(1, loginToken.length()-1));
gtiwari333
quelle
1
Ich mag es, dass du deinen Satz mit "Es ist einfach" beginnst ... :) Ich denke, alles ist einfach, wenn du es weißt ... hat mir aber geholfen
daniel_aren
8
Dies sollte loginToken.length () - 2 sein, um die Endklammer zu entfernen.
mga911
7
@ mga911 Wie in meiner Antwort erwähnt, sollte der Parameter 'substring (beginIndex, endIndex)' '1' bzw. 'loginToken.length () - 1' sein (Index von [und]). Der erste Parameter ist inklusive und der zweite Parameter ist exklusiv. Der obige Code gibt mir die richtige Ausgabe.
gtiwari333
Ich benutze (error.substring(2, error.length()-1)), um erste und letzte Klammern zu entfernen!
Iman Marashi
20

Dies ist eine generische Lösung:

str.replaceAll("^.|.$", "")
phibao37
quelle
5
Ist das ein japanisches Emoticon?
Balázs Németh
14

Sie können immer verwenden substring:

String loginToken = getName().toString();
loginToken = loginToken.substring(1, loginToken.length() - 1);
Ted Hopp
quelle
7

Eine andere Lösung für dieses Problem ist die Verwendung der StringUtils.substringBetween(String str, String open, String close)Methode commons-lang (seit Version 2.0) . Hauptvorteil ist, dass es null sicherer Betrieb ist.

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

michal.kreuzman
quelle
2
Dies funktioniert für dieses spezielle Szenario, gibt jedoch "wdsd" zurück, wenn "[wdsd] 34svdf]" als erster Parameter übergeben wurde.
Izilotti
5

Ich hatte ein ähnliches Szenario und dachte, dass so etwas

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

sah sauberer aus. Wenn Ihr Token Klammern enthält, funktioniert das natürlich nicht.

V9801
quelle
1
Bitte beachten Sie, dass nur replaceAll () und replaceFirst () den regulären Ausdruck unterstützen. Hier also str.replaceAll ("\\ [| \\]", ""); wird funktionieren
rekinyz
1
Der richtige Ausdruck ist so etwas wie str = str.replaceAll ("\ [| \]", ""); siehe das fehlende \\ in deinem Ausdruck
Raj
1

das funktioniert einwandfrei

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);
Chidanand
quelle
Ich denke, es gibt einen Tippfehler in der vorletzten Zeile des Codes. Ich denke, Sie wollten sagen, strr.replaceAll(...)anstatt str.replaceAll(...) ( str durch strr ersetzen )
Sometowngeek
0

Auf diese Weise können Sie 1 führendes "[" und 1 nachfolgendes "]" Zeichen entfernen. Wenn Ihre Zeichenfolge nicht mit "[" beginnt oder mit "]" endet, wird nichts entfernt:

str.replaceAll("^\\[|\\]$", "")
Andriy Fedotov
quelle
Hast du das getestet? Ich kann mich irren, aber es sieht aus wie "Anfang der Zeichenfolge, dann entweder [oder] dann Ende der Zeichenfolge". Brauchen wir hier keine Klammern?
YakovL
1
Ja, es funktioniert einwandfrei: @Test public void testReplace () {String str = "[wdsd34svdf]"; str = str.replaceAll ("^ \ [| \] $", ""); assertTrue (str.equals ("wdsd34svdf")); }
Andriy Fedotov
0

StringUtils's removeStartund removeEndMethode helfen dabei, Zeichenfolgen vom Anfang und Ende einer Zeichenfolge zu entfernen.

In diesem Fall könnten wir auch eine Kombination dieser beiden Methoden verwenden

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

LÖSUNG 1

def spaceMeOut (str1):

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

str1 = 'Hallo'

print (spaceMeOut (str1))

LÖSUNG 2

def spaceMeOut (str1):

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

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

str1 = 'Hallo'

print (spaceMeOut (str1))

goku_cv
quelle
1
Bitte erläutern Sie die Unterschiede zwischen Ihren Lösungen und warum das OP die eine oder andere verwenden würde.
Sao
0

In Kotlin

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

Versuchen Sie dies, um die erste und letzte Klammer der Zeichenfolge zu entfernen, z. B. [1,2,3]

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

Erwartetes Ergebnis = 1,2,3

Abhijit Rajmane
quelle
-1

Dies gibt Ihnen eine Grundidee

    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);
Padma
quelle