[java] Java 두 줄 이상의 공백을 문자열의 단일 공백으로 바꾸고 선행 및 후행 공백을 삭제하는 방법

Java에서이 문자열을 변경하는 빠르고 간단한 방법을 찾고 있습니다.

" hello     there   "

이런 식으로

"hello there"

여기서 문자열의 시작 부분에 하나 이상의 공백이 없어지기를 제외하고는 여러 공백을 모두 단일 공백으로 바꿉니다.

이 같은 것은 나를 부분적으로 데려다

String mytext = " hello     there   ";
mytext = mytext.replaceAll("( )+", " ");

그러나 그렇지 않습니다.



답변

이 시도:

String after = before.trim().replaceAll(" +", " ");

또한보십시오


trim()정규식 없음

하나만 사용 하여이 작업을 수행 할 수도 replaceAll있지만 trim()솔루션 보다 읽기 쉽지 않습니다 . 그럼에도 불구하고 여기에 정규식이 무엇을 할 수 있는지 보여주기 위해 제공됩니다.

    String[] tests = {
        "  x  ",          // [x]
        "  1   2   3  ",  // [1 2 3]
        "",               // []
        "   ",            // []
    };
    for (String test : tests) {
        System.out.format("[%s]%n",
            test.replaceAll("^ +| +$|( )+", "$1")
        );
    }

3 가지 대안이 있습니다 :

  • ^_+ : 문자열의 시작 부분에있는 일련의 공백
    • $1빈 문자열을 캡처하는로 일치 및 바꾸기
  • _+$ : 문자열 끝에있는 일련의 공백
    • $1빈 문자열을 캡처하는로 일치 및 바꾸기
  • (_)+ : 위의 어느 것과도 일치하지 않는 모든 일련의 공백, 즉 중간에 있음을 의미합니다.
    • $1단일 공간을 캡처하는로 일치 및 교체

또한보십시오


답변

당신은 단지 필요합니다 :

replaceAll("\\s{2,}", " ").trim();

하나 이상의 공백을 일치시키고 공백을 단일 공백으로 바꾸고 시작과 끝에서 공백을 자릅니다 (먼저 누군가 지적한대로 정규 표현식을 더 빨리 만들기 위해 먼저 자르고 일치시켜 반전시킬 수 있습니다).

이것을 빨리 테스트하려면 다음을 시도하십시오.

System.out.println(new String(" hello     there   ").trim().replaceAll("\\s{2,}", " "));

그리고 그것은 반환됩니다 :

"hello there"


답변

Apache commons StringUtils.normalizeSpace(String str)메소드를 사용하십시오 . 여기 문서를 참조 하십시오


답변

이것은 나를 위해 완벽하게 작동했습니다. sValue = sValue.trim().replaceAll("\\s+", " ");


답변

"[ ]{2,}"

이것은 둘 이상의 공간과 일치합니다.

String mytext = " hello     there   ";
//without trim -> " hello there"
//with trim -> "hello there"
mytext = mytext.trim().replaceAll("[ ]{2,}", " ");
System.out.println(mytext);

산출:

hello there


답변

문자열의 시작과 끝에 공백을 제거하려면 String#trim()method를 사용하십시오 . 그런 다음을 사용하십시오 mytext.replaceAll("( )+", " ").


답변

String.trim()먼저을 사용한 다음 결과에 regex replace 명령을 적용 할 수 있습니다 .