Тем не менее, это немного похоже на то, что вы пытаетесь изобрести парсер CSV. Если так, я бы посоветовал поискать существующие библиотеки, такие как OpenCSV .
Не думаете ли вы, что он заменяет все вхождения двойных кавычек пустой строкой, а не первым и последним.
ГуруКульки
1
@ufk: это не сложное регулярное выражение. Вы в противном случае может потребоваться хлопот с кучей String#indexOf(), String#substring()методы и так далее. Это только немного быстрее, но это намного больше кода. @GK: Вы читали / понимали регулярное выражение или даже проверяли его?
BalusC
11
@GK каретка представляет начало искомой строки, а знак доллара - ее конец. Обратная косая черта здесь "ускользает" от следующей цитаты, поэтому она рассматривается как символ. Таким образом, это регулярное выражение говорит: замените все вхождения кавычки в начале или кавычки в конце пустой строкой. Так же, как и просили.
Карл Манастер
2
@Marc: я не уверен, как это проблема, рассматривая вопрос в его нынешнем виде.
BalusC
8
Вот регулярное выражение разломать ^\"|\"$. |означает «или». Таким образом, это будет соответствовать либо ^\"или \"$. ^соответствует началу строки и $соответствует концу строки. ^\"означает совпадение с кавычкой в начале строки и \"$совпадение с кавычкой в конце строки.
ibizaman
31
Чтобы удалить первый и последний символ из строки, используйте:
finalStringSchrodingersQuotedString="may or may not be quoted";StringUtils.strip(SchrodingersQuotedString,"\"");//quoted no more
Этот метод работает со строками в кавычках и без кавычек, как показано в моем примере. Единственным недостатком является то, что он не будет искать строго согласованные кавычки, только начальные и конечные символы кавычек (т. Е. Без различия между строками "partiallyи "fully"строками в кавычках).
можно ли обрезать только один символ? Например, если моя строка заканчивается двумя одинарными кавычками, я хочу, чтобы обрезали только одну кавычку.
Ватсал Мевада
10
Сначала мы проверяем, если строка String удвоена в кавычках, и, если это так, удалите их. Вы можете пропустить условное условие, если на самом деле вы знаете, что оно заключено в двойные кавычки.
Удаляет заданную строку разделителя из начала и конца этой строки, если и только если она начинается и заканчивается разделителем . В противном случае возвращает эту строку без изменений.
Исходный код выглядит так:
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)}returnthis}
Существуют сотни других языков программирования. Почему вы дали ответ для Kotlin, а не для других :-)?
nickolay.laptev
1
Хороший вопрос @ nickolay.laptev! :) Я писал java и перешел на kotlin, и, поскольку я разработчик для Android, я подумал, что другие разработчики могут быть в той же позиции, так что это может быть полезно и для них. Кроме того, removeSurrounding()метод, которым я поделился выше, показался мне понятным любому разработчику java.
Райан Амарал
1
Этот единственный ответ иллюстрирует весь смысл принятия Kotlin в вашей существующей кодовой базе Java!
Кирилл Грошков
3
Шаблон ниже, при использовании с java.util.regex.Matcher, будет сопоставлять любую строку между двойными кавычками, не затрагивая вхождения двойных кавычек внутри строки:
Я думаю, что аргумент метода должен быть аннотирован, @NonNullи он, вероятно, должен иметь что-то вроде Objects.requireNonNull(string)этого, потому что, если кто-то вызывает stripQuotes (null), он, вероятно, делает это по ошибке!
brcolow
2
Scala
s.stripPrefix("\"").stripSuffix("\"")
Это работает независимо от того, имеет ли строка кавычки в начале и / или конце.
Отредактировано: только что понял, что я должен указать, что это работает, только если они оба существуют. В противном случае строка не считается кавычкой. Такой сценарий возник у меня при работе с CSV-файлами.
Ответы:
Вы можете использовать
String#replaceAll()
с шаблоном^\"|\"$
для этого.Например
Чтобы узнать больше о регулярных выражениях, зайдите на http://regular-expression.info .
Тем не менее, это немного похоже на то, что вы пытаетесь изобрести парсер CSV. Если так, я бы посоветовал поискать существующие библиотеки, такие как OpenCSV .
источник
String#indexOf()
,String#substring()
методы и так далее. Это только немного быстрее, но это намного больше кода. @GK: Вы читали / понимали регулярное выражение или даже проверяли его?^\"|\"$
.|
означает «или». Таким образом, это будет соответствовать либо^\"
или\"$
.^
соответствует началу строки и$
соответствует концу строки.^\"
означает совпадение с кавычкой в начале строки и\"$
совпадение с кавычкой в конце строки.Чтобы удалить первый и последний символ из строки, используйте:
источник
Также с Apache
StringUtils.strip()
:Так,
Этот метод работает со строками в кавычках и без кавычек, как показано в моем примере. Единственным недостатком является то, что он не будет искать строго согласованные кавычки, только начальные и конечные символы кавычек (т. Е. Без различия между строками
"partially
и"fully"
строками в кавычках).источник
Если двойные кавычки существуют только в начале и в конце, простой код, как это будет работать отлично:
string = string.replace("\"", "");
источник
Это лучший способ найти двойные кавычки в начале и в конце строки.
источник
Используя Guava вы можете писать более элегантно
CharMatcher.is('\"').trimFrom(mystring);
источник
Сначала мы проверяем, если строка String удвоена в кавычках, и, если это так, удалите их. Вы можете пропустить условное условие, если на самом деле вы знаете, что оно заключено в двойные кавычки.
источник
Котлин
В Kotlin вы можете использовать String.removeSurrounding (разделитель: CharSequence)
Например
Исходный код выглядит так:
источник
removeSurrounding()
метод, которым я поделился выше, показался мне понятным любому разработчику java.Шаблон ниже, при использовании с
java.util.regex.Matcher
, будет сопоставлять любую строку между двойными кавычками, не затрагивая вхождения двойных кавычек внутри строки:источник
Немного изменив ответ @ brcolow
источник
@NonNull
и он, вероятно, должен иметь что-то вродеObjects.requireNonNull(string)
этого, потому что, если кто-то вызывает stripQuotes (null), он, вероятно, делает это по ошибке!Scala
Это работает независимо от того, имеет ли строка кавычки в начале и / или конце.
Изменить: Извините, только Скала
источник
Отредактировано: только что понял, что я должен указать, что это работает, только если они оба существуют. В противном случае строка не считается кавычкой. Такой сценарий возник у меня при работе с CSV-файлами.
источник
источник
источник
Чтобы удалить одну или несколько двойных кавычек из начала и конца строки в Java, вам нужно использовать решение на основе регулярных выражений:
Если вам нужно также удалить одинарные кавычки:
ПРИМЕЧАНИЕ : если ваша строка содержит
"
внутри, этот подход может привести к проблемам (например,"Name": "John"
=>Name": "John
).Посмотрите демонстрацию Java здесь :
источник
найдите индексы каждой двойной кавычки и вставьте туда пустую строку.
источник