Ответы:
Вы можете использовать String#replaceAll()
с шаблоном ^\"|\"$
для этого.
Например
string = string.replaceAll("^\"|\"$", "");
Чтобы узнать больше о регулярных выражениях, зайдите на http://regular-expression.info .
Тем не менее, это немного похоже на то, что вы пытаетесь изобрести парсер CSV. Если так, я бы посоветовал поискать существующие библиотеки, такие как OpenCSV .
String#indexOf()
, String#substring()
методы и так далее. Это только немного быстрее, но это намного больше кода. @GK: Вы читали / понимали регулярное выражение или даже проверяли его?
^\"|\"$
. |
означает «или». Таким образом, это будет соответствовать либо ^\"
или \"$
. ^
соответствует началу строки и $
соответствует концу строки. ^\"
означает совпадение с кавычкой в начале строки и \"$
совпадение с кавычкой в конце строки.
Чтобы удалить первый и последний символ из строки, используйте:
myString = myString.substring(1, myString.length()-1);
Также с 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"
Так,
final String SchrodingersQuotedString = "may or may not be quoted";
StringUtils.strip(SchrodingersQuotedString, "\""); //quoted no more
Этот метод работает со строками в кавычках и без кавычек, как показано в моем примере. Единственным недостатком является то, что он не будет искать строго согласованные кавычки, только начальные и конечные символы кавычек (т. Е. Без различия между строками "partially
и "fully"
строками в кавычках).
Если двойные кавычки существуют только в начале и в конце, простой код, как это будет работать отлично:
string = string.replace("\"", "");
Используя Guava вы можете писать более элегантно CharMatcher.is('\"').trimFrom(mystring);
Сначала мы проверяем, если строка String удвоена в кавычках, и, если это так, удалите их. Вы можете пропустить условное условие, если на самом деле вы знаете, что оно заключено в двойные кавычки.
if (string.length() >= 2 && string.charAt(0) == '"' && string.charAt(string.length() - 1) == '"')
{
string = string.substring(1, string.length() - 1);
}
В Kotlin вы можете использовать String.removeSurrounding (разделитель: CharSequence)
Например
string.removeSurrounding("\"")
Удаляет заданную строку разделителя из начала и конца этой строки, если и только если она начинается и заканчивается разделителем . В противном случае возвращает эту строку без изменений.
Исходный код выглядит так:
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()
метод, которым я поделился выше, показался мне понятным любому разработчику java.
Немного изменив ответ @ brcolow
if (string != null && string.length() >= 2 && string.startsWith("\"") && string.endsWith("\"") {
string = string.substring(1, string.length() - 1);
}
@NonNull
и он, вероятно, должен иметь что-то вроде Objects.requireNonNull(string)
этого, потому что, если кто-то вызывает stripQuotes (null), он, вероятно, делает это по ошибке!
Scala
s.stripPrefix("\"").stripSuffix("\"")
Это работает независимо от того, имеет ли строка кавычки в начале и / или конце.
Изменить: Извините, только Скала
Отредактировано: только что понял, что я должен указать, что это работает, только если они оба существуют. В противном случае строка не считается кавычкой. Такой сценарий возник у меня при работе с 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;
}
Чтобы удалить одну или несколько двойных кавычек из начала и конца строки в Java, вам нужно использовать решение на основе регулярных выражений:
String result = input_str.replaceAll("^\"+|\"+$", "");
Если вам нужно также удалить одинарные кавычки:
String result = input_str.replaceAll("^[\"']+|[\"']+$", "");
ПРИМЕЧАНИЕ : если ваша строка содержит "
внутри, этот подход может привести к проблемам (например, "Name": "John"
=>Name": "John
).
Посмотрите демонстрацию Java здесь :
String input_str = "\"'some string'\"";
String result = input_str.replaceAll("^[\"']+|[\"']+$", "");
System.out.println(result); // => some string
найдите индексы каждой двойной кавычки и вставьте туда пустую строку.