Відповіді:
Для цього можна використовувати 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("\"", "");
Це найкращий спосіб, який я знайшов, щоб зняти подвійні лапки з початку та кінця рядка.
someString.replace (/(^")|("$)/g, '')
За допомогою Guava ви можете писати елегантніше CharMatcher.is('\"').trimFrom(mystring);
По-перше, ми перевіряємо, чи вдвоє цитується рядок, і якщо так, видаляємо їх. Ви можете пропустити умовне, якщо насправді ви знаєте, що це подвійне цитування.
if (string.length() >= 2 && string.charAt(0) == '"' && string.charAt(string.length() - 1) == '"')
{
string = string.substring(1, string.length() - 1);
}
У Котліні ви можете використовувати 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), він, ймовірно, робить це помилково!
Скала
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
знайдіть індекси кожної подвійної лапки і вставте туди порожній рядок.