2010-04-09 3 views

답변

172

이에 대한 ^\"|\"$의 패턴 String#replaceAll()를 사용할 수 있습니다.

string = string.replaceAll("^\"|\"$", ""); 

을 가열 공기 조절기에 대한 자세한 내용은 lar 표현은 http://regular-expression.info에 있습니다.

즉, 이것은 당신이 CSV 파서를 발명하려고하는 것처럼 약간 냄새가 난다고합니다. 그렇다면 OpenCSV과 같은 기존 라이브러리를 둘러 보시기 바랍니다.

+4

두 따옴표의 모든 발생을 첫 번째 및 마지막이 아닌 빈 문자열로 바꿀 것이라고 생각하지 않습니까? – GuruKulki

+0

저는 CSV 파서를 만들지 않습니다. 난 tinyfbclient를 사용하여 페이스 북 응용 프로그램을 구축하고있어 나에게 꼬리말과 꼬리말을 붙이는 사용자의 uid를 제공한다. – ufk

+1

@ufk : 이것은 복잡한 정규 표현식이 아닙니다. 그렇지 않으면'String # indexOf()','String # substring()', 메소드 등을 번거롭게 할 수 있습니다. 조금 더 빨라졌지만 훨씬 더 많은 코드입니다. @ GK : 어, 당신은 정규식을 읽고 이해 했습니까? 아니면 그것을 테스트 했습니까? – BalusC

0

찾기 인덱스와 거기에 빈 문자열을 삽입 할 수 있습니다.

+2

그러나 중간에 따옴표를주의하십시오 ... –

+0

그래서 첫 번째 인덱스와 두 번째 qoute의 마지막 인덱스 여야합니다. – GuruKulki

22

는 문자열에서 첫 번째 문자와 마지막 문자를 제거하려면 사용

myString = myString.substring(1, myString.length()-1); 
+11

이것은 단지 따옴표가 * 보장 *되어야 함을 요구합니다. 아무런 보장이 없다면 먼저 미리 확인해야합니다. – BalusC

+4

@BalusC : 물론입니다. 내 질문을 읽은 후, 그 문자열은 이미 주위에 따옴표가있는 것으로 알려져 있습니다. –

+0

.length는 함수가 아닌 속성입니다. – Martin

9

것은, 큰 따옴표는 시작과 끝 부분에 존재하는 경우 좀 더 우아하게 CharMatcher.is('\"').trimFrom(mystring);

+1

하나의 문자 만 다듬을 수 있습니까? 예를 들어, 문자열이 두 개의 작은 따옴표로 끝나는 경우에도 여전히 작은 따옴표 만 다듬기를 원합니다. –

1

을 작성할 수 있습니다 구아바를 사용하여 이 완벽하게 작동하는 것처럼 간단한 코드 :

string = string.replace("\"", "");

0
Matcher m = Pattern.compile("^\"(.*)\"$").matcher(value); 
String strUnquoted = value; 
if (m.find()) { 
    strUnquoted = m.group(1); 
} 
1
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; 
} 
2

먼저 문자열이 두 배로 인용되었는지 확인하고, 그렇다면이를 제거하십시오. 조건문을 건너 뛸 수 있습니다. 사실 큰 따옴표가 붙어있는 경우입니다. 또한 아파치 StringUtils.strip()

if (string.length() >= 2 && string.charAt(0) == '"' && string.charAt(string.length() - 1) == '"') 
{ 
    string = string.substring(1, string.length() - 1); 
} 
+0

이것은 주문에 대한 가장 효과적인 대답이며, 따옴표가 선택적인지 아닌지에 대해 수행 할 작업을 지정합니다. – entonio

1

: 내 예와 같이

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" 따옴표로 묶은 문자열 사이의 구별 없음).

9

문자열의 시작과 끝에서 큰 따옴표를 제거하는 가장 좋은 방법입니다. 당신은 또한 작은 따옴표를 제거해야하는 경우

String result = input_str.replaceAll("^\"+|\"+$", ""); 

:

someString.replace (/(^")|("$)/g, '') 
+1

작은 따옴표도 포함 할 수 있습니다 (/ (^ \ "| \ ') | (\"| \'$)/g, ""); – bob

0

자바에서 문자열의 시작과 끝에서 하나 이상의 큰 따옴표를 제거하려면 정규식 기반 솔루션을 사용해야합니다 :

String result = input_str.replaceAll("^[\"']+|[\"']+$", ""); 

참고 : 당신의 문자열 내부 " 포함되어있는 경우,이 방법은 (문제가 발생할 수 있습니다 예를 들어,"Name": "John" =>Name": "John).

Java demo here 참조 :이 문자열이 있는지 여부에 관계없이 작동하거나 시작 및/또는 끝 부분에 따옴표가없는

String input_str = "\"'some string'\""; 
String result = input_str.replaceAll("^[\"']+|[\"']+$", ""); 
System.out.println(result); // => some string 
0

s.stripPrefix("\"").stripSuffix("\"")

.

편집 : 죄송합니다, 스칼라는

관련 문제