Hoe kan ik beginnende en eindigende dubbele aanhalingstekens van een string inkorten?

Ik wil een dubbele aanhalingsteken aan het begin en einde (“”) uit een tekenreeks knippen.
Hoe kan ik dat in Java bereiken? Bedankt!


Antwoord 1, autoriteit 100%

Je kunt String#replaceAll()met een patroon van ^\"|\"$hiervoor.

Bijvoorbeeld

string = string.replaceAll("^\"|\"$", "");

Voor meer informatie over reguliere expressies, ga ook naar http://regular-expression.info.

Dat gezegd hebbende, dit ruikt een beetje alsof je een CSV-parser probeert uit te vinden. Als dat zo is, raad ik aan om rond te kijken naar bestaande bibliotheken, zoals OpenCSV.


Antwoord 2, autoriteit 13%

Om het eerste teken en het laatste teken uit de tekenreeks te verwijderen, gebruik je:

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

Antwoord 3, autoriteit 7%

Ook met Apache StringUtils.strip():

StringUtils.strip(null, *)          = null
 StringUtils.strip("", *)            = ""
 StringUtils.strip("abc", null)      = "abc"
 StringUtils.strip("  abc", null)    = "abc"
 StringUtils.strip("abc  ", null)    = "abc"
 StringUtils.strip(" abc ", null)    = "abc"
 StringUtils.strip("  abcyx", "xyz") = "  abc"

Dus,

final String SchrodingersQuotedString = "may or may not be quoted";
StringUtils.strip(SchrodingersQuotedString, "\""); //quoted no more

Deze methode werkt zowel met strings tussen aanhalingstekens als zonder aanhalingstekens, zoals in mijn voorbeeld. Het enige nadeel is dat het niet zoekt naar strikt overeenkomendeaanhalingstekens, alleen voor- en achteraanhalingstekens (dwz geen onderscheid tussen "partiallyen "fully"strings tussen aanhalingstekens).


Antwoord 4, autoriteit 6%

Als de dubbele aanhalingstekens alleen aan het begin en het einde bestaan, zou een eenvoudige code zoals deze perfect werken:

string = string.replace("\"", "");


Antwoord 5, autoriteit 5%

Dit is de beste manier die ik heb gevonden om dubbele aanhalingstekens aan het begin en einde van een tekenreeks te verwijderen.

someString.replace (/(^")|("$)/g, '')

Antwoord 6, autoriteit 4%

Eerst controleren we of de tekenreeks tussen aanhalingstekens staat, en zo ja, verwijderen ze. U kunt de voorwaardelijke overslaan als u weet dat deze dubbel aanhalingstekens is.

if (string.length() >= 2 && string.charAt(0) == '"' && string.charAt(string.length() - 1) == '"')
{
    string = string.substring(1, string.length() - 1);
}

Antwoord 7, autoriteit 4%

Met Guava kun je eleganter schrijven CharMatcher.is('\"').trimFrom(mystring);


Antwoord 8, autoriteit 4%

Kotlin

In Kotlin kun je String.removeSurrounding(delimiter) gebruiken : CharSequence)

Bijvoorbeeld

string.removeSurrounding("\"")

Verwijdert de gegeven delimiterstring van zowel het begin als het einde van deze string als en alleen als het begint met en eindigt met het delimiter.
Geeft deze string anders ongewijzigd terug.

De broncode ziet er als volgt uit:

public fun String.removeSurrounding(delimiter: CharSequence): String = removeSurrounding(delimiter, delimiter)
public fun String.removeSurrounding(prefix: CharSequence, suffix: CharSequence): String {
    if ((length >= prefix.length + suffix.length) && startsWith(prefix) && endsWith(suffix)) {
        return substring(prefix.length, length - suffix.length)
    }
    return this
}

Antwoord 9

Bewerkt: realiseerde me net dat ik moet specificeren dat dit alleen werkt als ze allebei bestaan. Anders wordt de tekenreeks niet als aangehaald beschouwd. Een dergelijk scenario deed zich voor bij het werken met CSV-bestanden.

org.apache.commons.lang3.StringUtils.unwrap("\"abc\"", "\"")    = "abc"
org.apache.commons.lang3.StringUtils.unwrap("\"abc", "\"")    = "\"abc"
org.apache.commons.lang3.StringUtils.unwrap("abc\"", "\"")    = "abc\""

Antwoord 10

Ik gebruik zoiets simpels als dit:

if(str.startsWith("\"") && str.endsWith("\""))
        {
            str = str.substring(1, str.length()-1);
        }

Antwoord 11

Als u een of meer dubbele aanhalingstekens aan het begin en einde van een tekenreeks in Java wilt verwijderen, moet u een op regex gebaseerde oplossing gebruiken:

String result = input_str.replaceAll("^\"+|\"+$", "");

Als u ook enkele aanhalingstekens moet verwijderen:

String result = input_str.replaceAll("^[\"']+|[\"']+$", "");

OPMERKING: als uw tekenreeks "bevat, kan deze benadering tot problemen leiden (bijv. "Name": "John"=&gt ; Name": "John).

Bekijk hier een Java-demo:

String input_str = "\"'some string'\"";
String result = input_str.replaceAll("^[\"']+|[\"']+$", "");
System.out.println(result); // => some string

Antwoord 12

Het onderstaande patroon, wanneer gebruikt met java.util.regex.Matcher, zal overeenkomen met elke tekenreeks tussen dubbele aanhalingstekens zonder het voorkomen van dubbele aanhalingstekens binnen de tekenreeks te beïnvloeden:

"[^\"][\\p{Print}]*[^\"]"

Antwoord 13

Matcher m = Pattern.compile("^\"(.*)\"$").matcher(value);
String strUnquoted = value;
if (m.find()) {
    strUnquoted = m.group(1);
}

Antwoord 14

Het antwoord van @brcolow een beetje aanpassen

if (string != null && string.length() >= 2 && string.startsWith("\"") && string.endsWith("\"") {
    string = string.substring(1, string.length() - 1);
}

Antwoord 15

public String removeDoubleQuotes(String request) {
    return request.replace("\"", "");
}

Antwoord 16

private static String removeQuotesFromStartAndEndOfString(String inputStr) {
    String result = inputStr;
    int firstQuote = inputStr.indexOf('\"');
    int lastQuote = result.lastIndexOf('\"');
    int strLength = inputStr.length();
    if (firstQuote == 0 && lastQuote == strLength - 1) {
        result = result.substring(1, strLength - 1);
    }
    return result;
}

Antwoord 17

Scala

s.stripPrefix("\"").stripSuffix("\"")

Dit werkt ongeacht of de string al dan niet aanhalingstekens aan het begin en/of einde heeft.

Bewerken: Sorry, alleen Scala


Antwoord 18

vind indexen van elke dubbele aanhalingstekens en voeg daar een lege string in.


Antwoord 19

Groovy

Je kunt een subtekenreeks van een tekenreeks aftrekken met een reguliere expressie in groovy:

String unquotedString = theString - ~/^"/ - ~/"$/

Other episodes