그래서 이걸 좀 고민하고 있습니다. 어딘가에서 문자열을 가져올 때 모든 문자 사이에 공백을 추가하기로 결정했습니다. (" "
가 추가 공백 " "
으로 변하기 때문에) 한 공간 트리플 공백을 대체 공백없이 문자열 대체 정규식
- :
난 그냥에 대한 빠른 정규식이 필요합니다.
누군가가이 정규식에 대한 도움을 줄 수 있습니까? 단일/다중 공백에 대해이 작업을 수행하는 방법을 알고 있지만 x 공백을 1 공백으로 바꾸지는 않습니다.
그래서 이걸 좀 고민하고 있습니다. 어딘가에서 문자열을 가져올 때 모든 문자 사이에 공백을 추가하기로 결정했습니다. (" "
가 추가 공백 " "
으로 변하기 때문에) 한 공간 트리플 공백을 대체 공백없이 문자열 대체 정규식
난 그냥에 대한 빠른 정규식이 필요합니다.
누군가가이 정규식에 대한 도움을 줄 수 있습니까? 단일/다중 공백에 대해이 작업을 수행하는 방법을 알고 있지만 x 공백을 1 공백으로 바꾸지는 않습니다.
s = s.replaceAll("\\s{3}", " "); // Replace 3 spaces with one.
난 당신이 공백없이 하나의 공간을 대체 알아 내기 위해 알고 있다고 가정.
{n}
은 정확히 n
개의 공백과 일치합니다.{0,n}
은 0 ~ n 공백과 일치합니다.{4,}
은 4 개 이상의 공백과 일치합니다. s = "He llo World";
s = s.replaceAll("(\\S)\\s{1}(\\S)", "$1$2").replaceAll("\\s{3}", " ");
System.out.println(s);
OUPUT : - - :
Hello World
주문 사항 여기
는 아래 정규식을 사용하여, 한 공간이 모두없는 공간 single space
및 3 spaces
를 교체하려면. 왜냐하면 3 spaces
은 두 번째 정규식을 사용하여 single space
으로 변환되기 때문입니다. 첫 번째 전에 사용하면 no-space
으로 바뀝니다.
(\\S)\\s{1}(\\S)
->\\S
은 단 하나의 공간 만 교체해야합니다. \\S
은 공백이 아닌 문자를 나타냅니다. 가지고 있지 않으면 모든 공백 문자가 공백없이 바뀝니다.
@ F.J 너 무슨 소리 야? '(\\ S) \\ s {1} (\\ S)'는 처음에 모든 단일 공백 문자를 대체합니다. 그러면'\\ s {3}'은 3 공백 문자를 공백 문자로 대체합니다. 이 문제가 있습니까? –
@ F.J Ok, 게시물을 업데이트하기 전에 해당 의견을 추가 할 수 있습니다. :) –
내 의견은 처음 게시했을 때부터였으며 더 이상 적용 할 수 없기 때문에 삭제되었습니다. –
단일 공백을 공백없이 바꾸면 3 배 공백이 1 공백으로 대체됩니다.
정규 표현식에는 아무런 문제가 없습니다.
은 어쨌든 정규식에 대한 직업입니다.
input.replaceAll("(?<=\S) (?=\S)", "").replaceAll(" {3,}", " ");
첫 번째 정규식이 아닌 공간 (모양 숨김, (?<=\S)
)로 시작하고 비 공백 모든 단일 공백을 대체 (예견 (?=\S)
을).
다른 정규식은 나머지 트리플 스페이스 (또는 그 이상)를 처리합니다.
난 당신이 단순히 다음과 같은 몇 가지 해결 방법으로 원하는 조합으로 replaceAll()
을 사용할 수 있다고 생각 :
//locate 3 spaces and mark them using some special chars
myString = myString.replaceAll(" ", "@@@"); //use some special combination
//replace single spaces with no spaces
myString = myString.replaceAll(" ", "");
//now replace marked 3 spaces with one space
myString = myString.replaceAll("@@@", " "); //use the same special combination
마지막 문자는''''가 아니라'' "''로 대체해야합니다. – brimborium
감사합니다. 오타였습니다. 나는 고쳤다. –
이렇게 생각했습니다. 문자열에 이미'@@@'이 포함되어 있다면? – brimborium
그것은 여기 조금 까다 롭습니다,하지만 하나의 정규식 솔루션입니다 :
// becomes "test string"
"t e s t s t r i n g".replaceAll("() | ", "$1");
트리플 공간이 일치하는 경우, 공간 중 하나에 저장되기 때문에이 작동 그룹 1을 캡처하지만 단일 공간이 일치하는 경우 캡처 그룹 1은 비어 있습니다. 경기 내용을 그룹의 내용으로 대체하면 3 개의 공백을 하나로 바꾸고 단일 공백을 제거합니다.
** 매우 멋진 **. 나는이 해결책을 좋아한다. – brimborium
+1이 솔루션을 너무 좋아했습니다. :) –
'모든 문자 사이에 공백 추가' – Anirudha