2012-10-11 4 views
3

그래서 이걸 좀 고민하고 있습니다. 어딘가에서 문자열을 가져올 때 모든 문자 사이에 공백을 추가하기로 결정했습니다. (" "가 추가 공백 "   "으로 변하기 때문에) 한 공간 트리플 공백을 대체 공백없이 문자열 대체 정규식

  • 으로 하나의 공간을 교체

    • :

      난 그냥에 대한 빠른 정규식이 필요합니다.

    누군가가이 정규식에 대한 도움을 줄 수 있습니까? 단일/다중 공백에 대해이 작업을 수행하는 방법을 알고 있지만 x 공백을 1 공백으로 바꾸지는 않습니다.

  • +0

    '모든 문자 사이에 공백 추가' – Anirudha

    답변

    3
    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 space3 spaces를 교체하려면. 왜냐하면 3 spaces은 두 번째 정규식을 사용하여 single space으로 변환되기 때문입니다. 첫 번째 전에 사용하면 no-space으로 바뀝니다.

    (\\S)\\s{1}(\\S) ->\\S은 단 하나의 공간 만 교체해야합니다. \\S은 공백이 아닌 문자를 나타냅니다. 가지고 있지 않으면 모든 공백 문자가 공백없이 바뀝니다.

    +0

    @ F.J 너 무슨 소리 야? '(\\ S) \\ s {1} (\\ S)'는 처음에 모든 단일 공백 ​​문자를 대체합니다. 그러면'\\ s {3}'은 3 공백 문자를 공백 문자로 대체합니다. 이 문제가 있습니까? –

    +0

    @ F.J Ok, 게시물을 업데이트하기 전에 해당 의견을 추가 할 수 있습니다. :) –

    +0

    내 의견은 처음 게시했을 때부터였으며 더 이상 적용 할 수 없기 때문에 삭제되었습니다. –

    0

    단일 공백을 공백없이 바꾸면 3 배 공백이 1 공백으로 대체됩니다.

    정규 표현식에는 아무런 문제가 없습니다.

    어쨌든 정규식에 대한 직업입니다.

    input.replaceAll("(?<=\S) (?=\S)", "").replaceAll(" {3,}", " "); 
    

    첫 번째 정규식이 아닌 공간 (모양 숨김, (?<=\S))로 시작하고 비 공백 모든 단일 공백을 대체 (예견 (?=\S)을).

    다른 정규식은 나머지 트리플 스페이스 (또는 그 이상)를 처리합니다.

    0

    난 당신이 단순히 다음과 같은 몇 가지 해결 방법으로 원하는 조합으로 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 
    
    +0

    마지막 문자는''''가 아니라'' "''로 대체해야합니다. – brimborium

    +1

    감사합니다. 오타였습니다. 나는 고쳤다. –

    +0

    이렇게 생각했습니다. 문자열에 이미'@@@'이 포함되어 있다면? – brimborium

    4

    그것은 여기 조금 까다 롭습니다,하지만 하나의 정규식 솔루션입니다 :

    // becomes "test string" 
    "t e s t s t r i n g".replaceAll("() | ", "$1"); 
    

    예 : http://ideone.com/O6DSk

    트리플 공간이 일치하는 경우, 공간 중 하나에 저장되기 때문에이 작동 그룹 1을 캡처하지만 단일 공간이 일치하는 경우 캡처 그룹 1은 비어 있습니다. 경기 내용을 그룹의 내용으로 대체하면 3 개의 공백을 하나로 바꾸고 단일 공백을 제거합니다.

    +0

    ** 매우 멋진 **. 나는이 해결책을 좋아한다. – brimborium

    +0

    +1이 솔루션을 너무 좋아했습니다. :) –