Respostas:
Você pode usar String#replaceAll()
com um padrão ^\"|\"$
para isso.
Por exemplo
string = string.replaceAll("^\"|\"$", "");
Para saber mais sobre expressões regulares, acesse http://regular-expression.info .
Dito isto, cheira um pouco assim que você está tentando inventar um analisador de CSV. Nesse caso, sugiro procurar em bibliotecas existentes, como o OpenCSV .
String#indexOf()
, String#substring()
, métodos e assim por diante. É apenas um pouco mais rápido, mas é muito mais código. @GK: Você leu / entendeu o regex ou até o testou?
^\"|\"$
. |
significa "ou". Assim, corresponderá a ^\"
ou \"$
. ^
corresponde ao início da string e ao $
final da string. ^\"
significa corresponder uma cotação no início da string e \"$
corresponde a uma cotação no final da string.
Para remover o primeiro e o último caractere da string, use:
myString = myString.substring(1, myString.length()-1);
Também com 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"
Assim,
final String SchrodingersQuotedString = "may or may not be quoted";
StringUtils.strip(SchrodingersQuotedString, "\""); //quoted no more
Este método funciona tanto com seqüências de caracteres entre aspas quanto entre aspas, como mostrado no meu exemplo. A única desvantagem é que ele não procurará aspas estritamente correspondentes , apenas caracteres de aspas iniciais e finais (ou seja, nenhuma distinção entre strings "partially
e "fully"
aspas).
Se as aspas duplas existirem apenas no início e no final, um código simples como isso funcionaria perfeitamente:
string = string.replace("\"", "");
Esta é a melhor maneira que encontrei, para remover aspas duplas do início e do fim de uma string.
someString.replace (/(^")|("$)/g, '')
Usando o Goiaba, você pode escrever com mais elegância CharMatcher.is('\"').trimFrom(mystring);
Primeiro, verificamos se a String é duplicada entre aspas e, em caso afirmativo, removemos. Você pode pular o condicional se, de fato, souber que ele é citado duas vezes.
if (string.length() >= 2 && string.charAt(0) == '"' && string.charAt(string.length() - 1) == '"')
{
string = string.substring(1, string.length() - 1);
}
No Kotlin, você pode usar String.removeSurrounding (delimitador: CharSequence)
Por exemplo
string.removeSurrounding("\"")
Remove a cadeia de caracteres delimitadora fornecida do início e do fim dessa cadeia de caracteres, se e somente se ela inicia e termina com o delimitador . Caso contrário, retorna essa sequência inalterada.
O código fonte fica assim:
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
}
removeSurrounding()
método que eu compartilhei acima me parecia fácil de entender por qualquer desenvolvedor java.
Modificando um pouco a resposta de @ brcolow
if (string != null && string.length() >= 2 && string.startsWith("\"") && string.endsWith("\"") {
string = string.substring(1, string.length() - 1);
}
@NonNull
e provavelmente deve ter algo como Objects.requireNonNull(string)
dentro dele, porque se alguém está chamando stripQuotes (null), provavelmente está fazendo isso por engano!
Scala
s.stripPrefix("\"").stripSuffix("\"")
Isso funciona independentemente de a sequência ter ou não aspas no início e / ou no final.
Edit: Desculpe, somente Scala
Editado: Acabei de perceber que devo especificar que isso funciona apenas se os dois existirem. Caso contrário, a sequência não será considerada entre aspas. Esse cenário apareceu para mim ao trabalhar com arquivos CSV.
org.apache.commons.lang3.StringUtils.unwrap("\"abc\"", "\"") = "abc"
org.apache.commons.lang3.StringUtils.unwrap("\"abc", "\"") = "\"abc"
org.apache.commons.lang3.StringUtils.unwrap("abc\"", "\"") = "abc\""
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;
}
Para remover uma ou mais aspas duplas do início e do fim de uma string em Java, você precisa usar uma solução baseada em regex:
String result = input_str.replaceAll("^\"+|\"+$", "");
Se você também precisar remover aspas simples:
String result = input_str.replaceAll("^[\"']+|[\"']+$", "");
NOTA : Se a sua string contiver "
dentro, essa abordagem poderá gerar problemas (por exemplo, "Name": "John"
=> Name": "John
).
Veja uma demonstração do Java aqui :
String input_str = "\"'some string'\"";
String result = input_str.replaceAll("^[\"']+|[\"']+$", "");
System.out.println(result); // => some string
encontre índices de cada aspas duplas e insira uma string vazia lá.