Câu trả lời:
Bạn có thể sử dụng String#replaceAll()
với một mô hình ^\"|\"$
cho việc này.
Ví dụ
string = string.replaceAll("^\"|\"$", "");
Để tìm hiểu thêm về các biểu thức thông thường, hãy tìm hiểu tại http://THER-expression.info .
Điều đó nói rằng, điều này có mùi hơi giống như bạn đang cố gắng phát minh một trình phân tích cú pháp CSV. Nếu vậy, tôi khuyên bạn nên tìm xung quanh các thư viện hiện có, chẳng hạn như OpenCSV .
String#indexOf()
, String#substring()
, phương pháp và vân vân. Nó chỉ nhanh hơn một chút, nhưng nó nhiều mã hơn. @GK: Uh, bạn đã đọc / hiểu regex hay thậm chí kiểm tra nó chưa?
^\"|\"$
. |
có nghĩa là "hoặc". Do đó, nó sẽ phù hợp hoặc ^\"
hoặc \"$
. ^
khớp bắt đầu chuỗi và $
khớp cuối chuỗi. ^\"
có nghĩa là khớp với một trích dẫn ở đầu chuỗi và \"$
khớp với một trích dẫn ở cuối chuỗi.
Để xóa ký tự đầu tiên và ký tự cuối cùng khỏi chuỗi, sử dụng:
myString = myString.substring(1, myString.length()-1);
Cũng với 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"
Vì thế,
final String SchrodingersQuotedString = "may or may not be quoted";
StringUtils.strip(SchrodingersQuotedString, "\""); //quoted no more
Phương pháp này hoạt động cả với các chuỗi được trích dẫn và không trích dẫn như trong ví dụ của tôi. Nhược điểm duy nhất là, nó sẽ không tìm đúng phù hợp với dấu ngoặc kép, chỉ ở đầu và đuôi ký tự quote (tức. Có sự phân biệt giữa "partially
và "fully"
chuỗi trích dẫn).
Nếu dấu ngoặc kép chỉ tồn tại ở đầu và cuối, một mã đơn giản vì điều này sẽ hoạt động hoàn hảo:
string = string.replace("\"", "");
Đây là cách tốt nhất mà tôi tìm thấy, để tách các trích dẫn kép từ đầu và cuối chuỗi.
someString.replace (/(^")|("$)/g, '')
Sử dụng quả ổi bạn có thể viết thanh lịch hơn CharMatcher.is('\"').trimFrom(mystring);
Đầu tiên, chúng tôi kiểm tra xem Chuỗi có được nhân đôi trích dẫn hay không và nếu có, hãy xóa chúng. Bạn có thể bỏ qua điều kiện nếu trên thực tế bạn biết đó là trích dẫn kép.
if (string.length() >= 2 && string.charAt(0) == '"' && string.charAt(string.length() - 1) == '"')
{
string = string.substring(1, string.length() - 1);
}
Trong Kotlin bạn có thể sử dụng String.removeSurrounding (dấu phân cách: CharSequence)
Ví dụ
string.removeSurrounding("\"")
Xóa chuỗi phân cách đã cho khỏi cả bắt đầu và kết thúc chuỗi này khi và chỉ khi nó bắt đầu bằng và kết thúc bằng dấu phân cách . Nếu không thì trả về chuỗi này không thay đổi.
Mã nguồn trông như thế này:
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()
phương pháp tôi chia sẻ ở trên có vẻ dễ hiểu đối với bất kỳ nhà phát triển java nào.
Sửa đổi câu trả lời của @ brcolow một chút
if (string != null && string.length() >= 2 && string.startsWith("\"") && string.endsWith("\"") {
string = string.substring(1, string.length() - 1);
}
@NonNull
và nó có thể có một cái gì đó giống như Objects.requireNonNull(string)
bên trong nó bởi vì nếu ai đó đang gọi dảiQuote (null) thì có lẽ họ đang làm như vậy do nhầm lẫn!
Scala
s.stripPrefix("\"").stripSuffix("\"")
Điều này hoạt động bất kể chuỗi có hoặc không có dấu ngoặc kép ở đầu và / hoặc kết thúc.
Chỉnh sửa: Xin lỗi, chỉ Scala
Chỉnh sửa: Chỉ cần nhận ra rằng tôi nên xác định rằng điều này chỉ hoạt động nếu cả hai tồn tại. Nếu không, chuỗi không được coi là trích dẫn. Kịch bản như vậy xuất hiện với tôi khi làm việc với các tệp 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;
}
Để xóa một hoặc nhiều dấu ngoặc kép từ đầu và cuối chuỗi trong Java, bạn cần sử dụng giải pháp dựa trên regex:
String result = input_str.replaceAll("^\"+|\"+$", "");
Nếu bạn cũng cần xóa dấu ngoặc đơn:
String result = input_str.replaceAll("^[\"']+|[\"']+$", "");
LƯU Ý : Nếu chuỗi của bạn chứa "
bên trong, cách tiếp cận này có thể dẫn đến các vấn đề (ví dụ "Name": "John"
=>Name": "John
).
Xem bản demo Java tại đây :
String input_str = "\"'some string'\"";
String result = input_str.replaceAll("^[\"']+|[\"']+$", "");
System.out.println(result); // => some string