2017-05-16 1 views
3

내 프로그램에서 처리해야하는 파일에서 일부 문자열을 읽습니다. ^ 내가 설명하는 데 사용되는 공백 문자 인 경우 문자열의 여러 문자 자르기

A1DY^ 
BLKSS^ 
"GH67^"^ 

처럼 파일의 원본 텍스트 보인다. 파일에서 모든 단어가 공백으로 끝나는 것을 볼 수 있습니다. 일부 단어는 큰 따옴표로 묶여 있습니다. 내가 즉 내 프로그램

A1DY 
BLKSS 
GH67 

이러한 문자열을 저장하려면, 나는 모든 공간과 따옴표를 다듬을. str.trim();을 사용하면 마지막 공간이 제거됩니다. 따라서 세 번째 줄은 "GH67^"이됩니다. 또한 str.replaceAll("^\"|\"$", "");을 사용하여 큰 따옴표를 자릅니다. 결과는 GH67^입니다. 즉, 나는 그것을 다시 다듬어야한다.

모든 공백과 큰 따옴표를 한 번에 제거하는 더 좋은 방법이 있습니까? 알파벳 문자를 추출하고 싶지는 않습니다. 특수 문자를 자르고 싶습니다.

+0

이 방법이 유용할까요? https://stackoverflow.com/questions/1805518/replacing-all-non-alphanumeric-characters-withempty-strings –

+0

영숫자를 추출합니다. 파일에 'DS-DK ^'가 있으면 'DS-DK'를 저장하고 싶습니다. – mahmood

+0

'\ 0'이 문자로 사용되지 않으므로 공백 대신 '\ 0'을 사용하는 것이 더 유용 할 수 있습니다. – AppWriter

답변

3

이것은 당신의 문자열의 시작이나 끝에서 인용 부호 나 공백의 수 트림됩니다 만 는 선행 공백 제거 공간을하지 후행합니다, 귀하의 질문에 설명의 엄격한 해석에

str = str.replaceAll("^[ \"]+|[ \"]+$", ""); 
+2

일반적인 초보자 실수를 막으려면 앞에 'str ='을 추가하십시오. – Andreas

+0

기술적으로, 선행 공백을 제거하는 것은 OP 요구 사항에 대한 카운터이지만 차이는 없습니다. – Andreas

+0

@ 앙드레아스 당신은 그것을 어디에서보고 있습니까? – shmosel

0

을 탭 (\t)과 같은 다른 공백 문자는 허용되지 않습니다.

또한 엄격한 트리밍 기능은 선행 쌍과 후행 쌍이 모두 발견되면 큰 따옴표를 제거하고 이러한 한 세트 만 제거합니다.

큰 따옴표가 있으면 큰 따옴표 안의 후행 공백도 제거해야합니다.

이 모든 것을 달성하기 위해, 엄격하게 는 단일 정규식 작업에서 다음을 수행하십시오

str = str.replaceFirst("^(\"?)(.*?) *\\1 *$", "$2"); 

이 정규식은 단지 전체 문자열에 대해 일치 확인하기 위해 ^$ 앵커를 사용합니다.

선도 인 "은 선택 사항이며 캡처 그룹 1 (있는 경우)과 일치합니다. 후행 "은 행간이 " 인 경우에만 일치하며 후행 "과 일치하는 경우 앞에 행간 "이 일치합니다. 이것은 "에 대한 선행 역 참조 \1을 사용하여 수행됩니다. 일치하면 결과에서 제거됩니다.

앞에 오는 공백은 제거되지 않지만 선택적 후행 " 앞뒤에 공백이 제거됩니다.

제거되지 않은 항목은 모두 그룹 2에서 캡처되어 대체 문자열에 보관됩니다.