Java에서 문자열에서 공백 제거


684

다음과 같은 문자열이 있습니다.

mysz = "name=john age=13 year=2001";

문자열에서 공백을 제거하고 싶습니다. 나는 시도 trim()했지만 이것은 전체 문자열 전후에 공백 만 제거합니다. 나는 또한 시도 replaceAll("\\W", "")했지만 그 =또한 제거된다.

어떻게 문자열을 얻을 수 있습니까?

mysz2 = "name=johnage=13year=2001"


76
"name = johnage = 13year = 2001"문자열을 사용한 계획은 무엇입니까? 파싱하지 않기를 바랍니다.
Jonas Elfström

4
@ JonasElfström 문자열 비교에 도움이 될 것이라고 생각합니다
Isaac

문자열이 실제로 = ""라면 어떨까요? trims ()가 언급 한 것처럼 빈 문자열을 지우는 것입니까? @zyamat?
gumuruh

답변:


1289

st.replaceAll("\\s+","")공백과 보이지 않는 문자를 모두 제거합니다 (예 : 탭, \n).


st.replaceAll("\\s+","")st.replaceAll("\\s","")동일한 결과를 생성한다.

두 번째 정규 표현식은 첫 번째 정규 표현식보다 20 % 빠르지 만 연속되는 공백 수가 증가하면 첫 번째 정규 표현식이 두 번째 정규 표현식보다 성능이 좋습니다.


직접 사용하지 않는 경우 값을 변수에 지정하십시오.

st = st.replaceAll("\\s+","")

34
이 두 정규 표현식은 모든 공백을 단일 공백 ​​(또는 다른 문자 집합)으로 바꾸려는 경우 다른 결과를 생성한다는 점에 유의하고 싶습니다. 연속 된 공백이있는 경우 \\ s를 사용하면 각 공백 문자가 제공된 문자로 바뀝니다. \\ s +가 주어지면 각 공백 세트를 단일 대체 문자열로 대체합니다. 공백을 빈 문자열이 아닌 다른 것으로 대체하여 사람들 이이 게시물에 올 수있는 경우가 많이 있습니다. 이것이 도움이 될 수 있습니다.
케이틀린

2
그러나 문자열의 시작 부분에 공백이 있으면 제거되지 않습니다.
고독한

@lonesome는 .trim ()을 사용합니다
CQM

6
apache-commons에서 StringUtils를 사용하십시오. StringUtils.deleteWhitespace라는 정적 메소드입니다.
Crozeta

@Gursel은 두 정규 표현식에 대한 답변과 성능 비교에 감사드립니다. 왜 둘 사이에 성능 차이가 있는지 궁금합니다. 내가 누락 된 것이 있습니까? 성능 차이에 대해 더 많이 언급하는 참조를 알려주십시오.
슈트

248
replaceAll("\\s","")

\w = 단어 문자

\W = 단어 문자가 아닌 것 (문구 등 포함)

\s = 공백 문자 (공백, 탭 문자 등)

\S = 공백 문자가 아닌 모든 것 (문자와 숫자, 구두점 등 포함)

(편집 : 지적했듯이 \s정규식 엔진에 도달하려면 백 슬래시를 피해야합니다 \\s.


103

질문에 대한 가장 정답은 다음과 같습니다.

String mysz2 = mysz.replaceAll("\\s","");

방금 다른 답변 에서이 코드를 수정했습니다. 나는 질문이 정확히 요청한 것 외에도 그것을 게시하기 때문에 게시하고 있습니다. 결과가 새로운 문자열로 반환되고 원본 문자열이 일부 답변이 암시하는 것처럼 수정되지 않았 음을 하고 있습니다 .

(경험이 풍부한 Java 개발자는 "물론 실제로 문자열을 수정할 수는 없습니다"라고 말할 수 있지만이 질문의 대상 독자는이를 잘 모를 수 있습니다.)


이것은 다음과 같이 작성하여 원래 문자열을 덮어 쓸 수 있음을 의미합니다. S = S.replaceAll ( "\\ s", ""); 반면에 교체 작업이 먼저 수행 된 후 S는 문자 처리 버전의 S
frogeyedpeas를

변수를 덮어 @frogeyedpeas S있지만 하지 않는 그 문자열을 덮어 S점을.
Monica Monica

내 하루를 구했다! ;)
Paras Jain


45

문자열 조작을 처리하는 한 가지 방법은 Apache commons의 StringUtils입니다.

String withoutWhitespace = StringUtils.deleteWhitespace(whitespaces);

여기에서 찾을 수 있습니다 . commons-lang에는 더 많은 것이 포함되어 있으며 잘 지원됩니다.


이것은 더 읽기 쉽다는 장점이 있습니다.
payne

36

깨지지 않는 공백도 제거해야하는 경우 다음과 같이 코드를 업그레이드 할 수 있습니다.

st.replaceAll("[\\s|\\u00A0]+", "");

이것은 실패 : " ab c "
흐드 파리 드에게

1
@MohdFarid 수정을 적용했습니다. 지금 확인해야합니다.
Denis Kulagin

st.replaceAll ( "[\\ s | \ u00A0] +", "")이어야합니다.
paramupk


25

당신은 이미 거셀 코카 (Gursel Koca)로부터 정답을 얻었지만 이것이 실제로 당신이하고 싶은 것이 아닐 가능성이 있다고 생각합니다. 대신 키-값을 파싱하는 것은 어떻습니까?

import java.util.Enumeration;
import java.util.Hashtable;

class SplitIt {
  public static void main(String args[])  {

    String person = "name=john age=13 year=2001";

    for (String p : person.split("\\s")) {
      String[] keyValue = p.split("=");
      System.out.println(keyValue[0] + " = " + keyValue[1]);
    }
  }
}

출력 :
이름 = 존
나이 = 13
년 = 2001


22

사용해야합니다

s.replaceAll("\\s+", "");

대신에:

s.replaceAll("\\s", "");

이런 식으로 각 문자열 사이에 공백이 두 개 이상있을 수 있습니다. 위 정규식에서 + 기호는 "하나 이상의 \ s"를 의미합니다.


2
나는 이것이 이상하게 들리고 더하기 부호가 필요하지 않기 때문에 이것을 확인하는 간단한 예를 입력했습니다. 단어를 구분하는 여러 공백이 사용됩니다. 그 이유 replaceAll는 패턴이 문자열의 어떤 부분과도 일치하지 않을 때까지 반복 될 가능성이 높습니다 .
nyaray

2
과연. 는 +연속적인 공백이 작동을 대체 하나에서 처리되기 때문에, 그것은 변두리에 더 많은 CPU 친화적 할 수도 있지만,이 경우 유일한 차이점입니다. 실제로 문자열의 비 연속 공백을 대체 All하는 +것이 아니라 입니다.
nitro2k01

그것은이 (u00A0)을 삭제하지 않습니다
KERIM FIRAT에게

8

가장 쉬운 방법 은 " " 와 같은 라이브러리 org.apache.commons.lang3.StringUtils클래스를 사용하는 것 입니다.commons-lang3commons-lang3-3.1.jar

StringUtils.deleteWhitespace(String str)입력 문자열에 정적 메소드 " "를 사용하면 공백을 모두 제거한 후 문자열이 반환됩니다. 예제 문자열 " name=john age=13 year=2001"을 (를) 시도 했으며 원하는 문자열 ( " ")을 정확하게 반환했습니다 name=johnage=13year=2001. 도움이 되었기를 바랍니다.


7

당신은 간단하게 그렇게 할 수 있습니다

String newMysz = mysz.replace(" ","");

놀랍게도, 내 상황에서 유일한 노동자. 감사.
Valeriy

6
public static void main(String[] args) {        
    String s = "name=john age=13 year=2001";
    String t = s.replaceAll(" ", "");
    System.out.println("s: " + s + ", t: " + t);
}

Output:
s: name=john age=13 year=2001, t: name=johnage=13year=2001

4
String a="string with                multi spaces ";
//or this 
String b= a.replaceAll("\\s+"," ");
String c= a.replace("    "," ").replace("   "," ").replace("  "," ").replace("   "," ").replace("  "," ");

// 어떤 공간에서도 잘 작동합니다 * 스팅에서 공간을 잊지 마세요 b


매우 유용하지만 게시 된 질문에 답변하지 않습니다!
BuvinJ

3

\W"단어가 아닌 문자"를 의미합니다. 공백 문자의 패턴은 \s입니다. 이것은 패턴 javadoc 에 잘 설명되어 있습니다.


8
이 답변의 나머지는 어디에 있습니까?
LS

3

자바에서는 다음과 같은 작업을 수행 할 수 있습니다.

String pattern="[\\s]";
String replace="";
part="name=john age=13 year=2001";
Pattern p=Pattern.compile(pattern);
Matcher m=p.matcher(part);
part=m.replaceAll(replace);
System.out.println(part);

이를 위해 다음 패키지를 프로그램으로 가져와야합니다.

import java.util.regex.Matcher;
import java.util.regex.Pattern;

도움이 되길 바랍니다.


이 정보는 답변을 게시하기 몇 년 전에 다른 사람들이 제공 한 것입니다.
jan groth

3

패턴 및 매처를 사용하면 더 동적입니다.

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RemovingSpace {

    /**
     * @param args
     * Removing Space Using Matcher
     */
    public static void main(String[] args) {
        String str= "jld fdkjg jfdg ";
        String pattern="[\\s]";
        String replace="";

        Pattern p= Pattern.compile(pattern);
        Matcher m=p.matcher(str);

        str=m.replaceAll(replace);
        System.out.println(str);    
    }
}


3

아파치 문자열 유틸리티 클래스를 사용하는 것이 NullPointerException을 피하는 것이 좋습니다.

org.apache.commons.lang3.StringUtils.replace("abc def ", " ", "")

산출

abcdef


2
mysz = mysz.replace(" ","");

먼저 공백이 있고 둘째는 공백이 없습니다.

그런 다음 완료됩니다.


7
명확히하기 위해 공백은 의미 [ \t\n\x0B\f\r]합니다. 당신은 정상적인 [ ]공간 만을하고 있습니다.
GKFX

2
import java.util.*;
public class RemoveSpace {
    public static void main(String[] args) {
        String mysz = "name=john age=13 year=2001";
        Scanner scan = new Scanner(mysz);

        String result = "";
        while(scan.hasNext()) {
            result += scan.next();
        }
        System.out.println(result);
    }
}


1

예제에서 공백을 제거하려면 다른 방법입니다.

String mysz = "name=john age=13 year=2001";
String[] test = mysz.split(" ");
mysz = String.join("", mysz);

이 작업은 공백을 구분 기호로 사용하여 배열로 변환 한 다음 공백없이 배열의 항목을 결합합니다.

꽤 잘 작동하고 이해하기 쉽습니다.


2
그러나 매우 비효율적 인 솔루션입니다. 그리고 다른 솔루션에서 볼 수 있듯이 이것은 ""공간에서만 작동하며 다른 종류의 공백에는 적용되지 않습니다.
GhostCat

1

문자열에 공백 문자도 있습니다. 따라서 공백 문자를 문자열에서 바꿔야 할 수도 있습니다.

예 : 휴식 공간 없음, EM 당 3 개 공간, 문장 부호 공간

다음은 공백 문자 목록입니다. http://jkorpela.fi/chars/spaces.html

따라서 수정해야합니다

\ EM3 공간 당 3 개

s.replaceAll ( "[\ u0020 \ u2004]", "")


0

공백은 문자 클래스에서 isWhitespace 함수를 사용하여 제거 할 수 있습니다.

public static void main(String[] args) {
    String withSpace = "Remove white space from line";
    StringBuilder removeSpace = new StringBuilder();

    for (int i = 0; i<withSpace.length();i++){
        if(!Character.isWhitespace(withSpace.charAt(i))){
            removeSpace=removeSpace.append(withSpace.charAt(i));
        }
    }
    System.out.println(removeSpace);
}

0

각 텍스트 그룹을 자체 하위 문자열로 분리 한 다음 해당 하위 문자열을 연결하십시오.

public Address(String street, String city, String state, String zip ) {
    this.street = street;
    this.city = city;
    // Now checking to make sure that state has no spaces...
    int position = state.indexOf(" ");
    if(position >=0) {
        //now putting state back together if it has spaces...
        state = state.substring(0, position) + state.substring(position + 1);  
    }
}

0
public static String removeWhiteSpaces(String str){
    String s = "";
    char[] arr = str.toCharArray();
    for (int i = 0; i < arr.length; i++) {
        int temp = arr[i];
        if(temp != 32 && temp != 9) { // 32 ASCII for space and 9 is for Tab
            s += arr[i];
        }
    }
    return s;
}

도움이 될 수 있습니다.


0

아래 Java 코드를 살펴볼 수도 있습니다. 다음 코드는 "내장"방법을 사용하지 않습니다.

/**
 * Remove all characters from an alphanumeric string.
 */
public class RemoveCharFromAlphanumerics {

    public static void main(String[] args) {

        String inp = "01239Debashish123Pattn456aik";

        char[] out = inp.toCharArray();

        int totint=0;

        for (int i = 0; i < out.length; i++) {
            System.out.println(out[i] + " : " + (int) out[i]);
            if ((int) out[i] >= 65 && (int) out[i] <= 122) {
                out[i] = ' ';
            }
            else {
                totint+=1;
            }

        }

        System.out.println(String.valueOf(out));
        System.out.println(String.valueOf("Length: "+ out.length));

        for (int c=0; c<out.length; c++){

            System.out.println(out[c] + " : " + (int) out[c]);

            if ( (int) out[c] == 32) {
                System.out.println("Its Blank");
                 out[c] = '\'';
            }

        }

        System.out.println(String.valueOf(out));

        System.out.println("**********");
        System.out.println("**********");
        char[] whitespace = new char[totint];
        int t=0;
        for (int d=0; d< out.length; d++) {

            int fst =32;



            if ((int) out[d] >= 48 && (int) out[d] <=57 ) {

                System.out.println(out[d]);
                whitespace[t]= out[d];
                t+=1;

            }

        }

        System.out.println("**********");
        System.out.println("**********");

        System.out.println("The String is: " + String.valueOf(whitespace));

    }
}

입력:

String inp = "01239Debashish123Pattn456aik";

산출:

The String is: 01239123456

0
private String generateAttachName(String fileName, String searchOn, String char1) {
    return fileName.replaceAll(searchOn, char1);
}


String fileName= generateAttachName("Hello My Mom","\\s","");

0

많은 답변이 제공됩니다. 정규식보다 읽기 쉽고 더 나은 솔루션을 제공하고 싶습니다.

import java.io.IOException;

import org.apache.commons.lang.StringUtils;

public class RemoveAllWhitespaceTest {

    public static void main(String[] args) throws IOException {

        String str1 = "\n\tThis is my string \n \r\n  !";

        System.out.println("[" + str1 + "]");

        System.out.println("Whitespace Removed:");

        System.out.println("[" + StringUtils.deleteWhitespace(str1) + "]");

        System.out.println();

    }

}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.