2010-04-09 37 views

Respuesta

172

puede utilizar String#replaceAll() con un patrón de ^\"|\"$ para esto.

Ej

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

para obtener más información sobre regu expresiones lar, tienen al ook al http://regular-expression.info.

Dicho esto, esto huele un poco como que estás tratando de inventar un analizador de CSV. Si es así, sugiero buscar bibliotecas existentes, como OpenCSV.

+4

¿No crees que reemplazará todas las apariciones de comillas dobles con una cadena vacía en lugar de la primera y la última? – GuruKulki

+0

No estoy construyendo un analizador csv. Estoy construyendo una aplicación de Facebook usando tinyfbclient y por alguna razón me proporciona el fluido del usuario con comillas dobles finales y finales. – ufk

+1

@ufk: esta no es una expresión regular compleja. De lo contrario, puede querer complicarse con un montón de 'String # indexOf()', 'String # substring()', métodos, etc. Es solo un poco más rápido, pero es mucho más código. @GK: Uh, ¿has leído/entendido la expresión regular o incluso la has probado? – BalusC

0

índices hallazgo de cada comillas dobles e insertar una cadena vacía allí.

+2

Pero ten cuidado con las comillas en el medio ... –

+0

, así que debería ser el primer índice y el último índice de doble qoute. – GuruKulki

22

para eliminar el primer carácter y el último carácter de la cadena, utilice:

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

Esto solo requiere que las comillas * garantizadas * estén presentes. Si no hay garantía, entonces deberá verificarlo primero de antemano. – BalusC

+4

@BalusC: Ciertamente. A partir de mi lectura de la pregunta, parece que ya se sabe que la cadena tiene citas a su alrededor. –

+0

.length es una propiedad no es una función – Martin

9

El uso de guayaba se puede escribir de manera más elegante CharMatcher.is('\"').trimFrom(mystring);

+1

¿es posible recortar solo un carácter? Por ejemplo, si mi cadena termina con dos comillas simples, quiero que solo se recorten comillas simples. –

1

Si las comillas dobles sólo existen en el comienzo y el fin, un código simple como esto funcionaría perfectamente:

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

0
Matcher m = Pattern.compile("^\"(.*)\"$").matcher(value); 
String strUnquoted = value; 
if (m.find()) { 
    strUnquoted = m.group(1); 
} 
1
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; 
} 
2

Primero, verificamos si la Cadena está duplicada, y si es así, quítelos. Puede omitir el condicional si, de hecho, sabe que tiene una cita doble.

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

Esta es la respuesta más eficaz por órdenes de magnitud e incluso especifica qué hacer con respecto a la presencia opcional o no de las comillas. – entonio

1

también con 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" 

Así,

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

Este método funciona tanto con cadenas entre comillas y no cotizados, como se muestra en mi ejemplo. El único inconveniente es que no buscará estrictamente las citas coincidentes, solo los caracteres de comillas iniciales y finales (es decir, no hay distinción entre "partially y "fully" cadenas entrecomilladas).

9

Esta es la mejor manera que encontré, para quitar comillas dobles del principio y el final de una cadena.

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

Quizás incluya comillas simples también replace (/ (^ \ "| \ ') | (\" | \' $)/g, ""); – bob

0

Para eliminar uno o más dobles comillas desde el inicio y el final de una cadena en Java, es necesario utilizar una solución basada en expresiones regulares:

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

Si es necesario eliminar también comillas simples:

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

NOTA: Si la cadena contiene " el interior, este enfoque podría conducir a problemas (por ejemplo,"Name": "John" =>Name": "John).

Ver un Java demo here:

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

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

Esto funciona independientemente de si la cadena tiene o no tiene comillas al principio y/o al final.

Edit: Lo siento, Scala única

Cuestiones relacionadas