답변:
이 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"
따옴표 문자열).
구아바를 사용하면 더 우아하게 쓸 수 있습니다 CharMatcher.is('\"').trimFrom(mystring);
먼저 문자열이 큰 따옴표로 묶여 있는지 확인하고, 그렇다면 문자열을 제거하십시오. 실제로 큰 따옴표로 묶인 경우 조건부를 건너 뛸 수 있습니다.
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)
!
편집 : 방금 이것이 둘 다 존재하는 경우에만 작동하도록 지정해야한다는 것을 깨달았습니다. 그렇지 않으면 문자열이 인용 된 것으로 간주되지 않습니다. 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
).
참조하십시오 여기에 자바 데모 :
String input_str = "\"'some string'\"";
String result = input_str.replaceAll("^[\"']+|[\"']+$", "");
System.out.println(result); // => some string