programing

Java를 사용하여 문자열에서 중복된 공백을 제거하려면 어떻게 해야 합니까?

bestcode 2022. 9. 5. 23:03
반응형

Java를 사용하여 문자열에서 중복된 공백을 제거하려면 어떻게 해야 합니까?

Java를 사용하여 문자열에서 중복된 공백(탭, 줄바꿈, 공백 등)을 제거하려면 어떻게 해야 합니까?

다음과 같이 합니다.

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

예를들면

System.out.println("lorem  ipsum   dolor \n sit.".replaceAll("\\s+", " "));

출력

lorem ipsum dolor sit.

그게 뭐야?\s+심술궂은가요?

\s+정규 표현입니다. \s공간, 탭, 새 줄, 캐리지 리턴, 폼 피드 또는 수직 탭과 일치합니다.+"1개 또는 여러 개"라고 말합니다.따라서 위의 코드는 한 글자보다 긴 모든 "공백 하위 문자열"을 단일 공백 문자로 축소합니다.


출처: Java: 문자열에서 중복된 공백을 제거합니다.

정규식을 사용할 수 있습니다.

(\s)\1

그리고.

그것을 로 대체하다.$1.

자바 코드:

str = str.replaceAll("(\\s)\\1","$1");

입력이"foo\t\tbar "얻을 수 있다"foo\tbar "산출물로서
단, 입력이"foo\t bar"연속되는 공백 문자가 없기 때문에 변경되지 않습니다.

모든 공백 문자(스페이스, 수직 탭, 수평 탭, 캐리지 리턴, 폼 피드, 새 줄)를 공백으로 처리할 경우 다음 정규식을 사용하여 연속된 공백 수를 단일 공백으로 바꿀 수 있습니다.

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

그러나 두 개의 연속된 공백을 단일 공간으로 바꾸려면 다음 작업을 수행해야 합니다.

str = str.replaceAll("\\s{2}"," ");
String str = "   Text    with    multiple    spaces    ";
str = org.apache.commons.lang3.StringUtils.normalizeSpace(str);
// str = "Text with multiple spaces"

이거 먹어봐 - 해야 돼import java.util.regex.*;

    Pattern pattern = Pattern.compile("\\s+");
    Matcher matcher = pattern.matcher(string);
    boolean check = matcher.find();
    String str = matcher.replaceAll(" ");

어디에string중복된 공백을 삭제해야 하는 문자열입니다.

안녕, 내가 찾은 가장 빠른 방법(예쁘지 않은 방법)은

while (cleantext.indexOf("  ") != -1)
  cleantext = StringUtils.replace(cleantext, "  ", " ");

이것은 정규식이 아닌 안드로이드에서 매우 빠르게 실행된다.

너무 늦었지만 모든 연속된 동일한 유형의 공백을 같은 유형의 공백으로 대체할 수 있는 더 나은 솔루션을 찾았습니다.즉, 다음과 같습니다.

   Hello!\n\n\nMy    World  

될 것이다

 Hello!\nMy World 

선행 및 후행 공백이 아직 남아 있습니다.그래서 저의 완전한 솔루션은 다음과 같습니다.

str = str.trim().replaceAll("(\\s)+", "$1"));

여기서,trim()는 선행 및 후행의 모든 공백 문자열을 " "로 바꿉니다. (\\s)캡처용\\s(', '\n', '\t' 등의 공백). +sign은 앞의 토큰을 1개 이상 대조하기 위한 것입니다.그렇게(\\s)+에는 임의의 단일 공백 문자(', '\n' 또는 '\t') 중 연속되는 문자(1개 이상)를 사용할 수 있습니다. $1는 일치하는 스트링을 일치하는 유형의 그룹 #1 스트링(1개의 공백 문자만 포함)으로 치환하기 위한 것입니다(이는 일치하는 단일 공백 문자입니다).위의 솔루션은 다음과 같이 변경됩니다.

   Hello!\n\n\nMy    World  

될 것이다

Hello!\nMy World

저는 위의 해결책을 찾지 못해 글을 올렸습니다.

선행 및 후행 관련 없는 공백을 모두 제거하려면 다음과 같은 작업을 수행해야 합니다.

// \\A = Start of input boundary
// \\z = End of input boundary 
string = string.replaceAll("\\A\\s+(.*?)\\s+\\z", "$1");

그런 다음 다음에 나열된 다른 전략을 사용하여 중복 항목을 제거할 수 있습니다.

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

공간, 탭, 줄 바꿈 등 모든 것에 대해 String Tokenizer를 사용해 볼 수도 있습니다.간단한 방법은

String s = "Your Text Here";        
StringTokenizer st = new StringTokenizer( s, " " );
while(st.hasMoreTokens())
{
    System.out.print(st.nextToken());
}

이것은, 다음의 3개의 스텝으로 실시할 수 있습니다.

  1. 문자열을 문자 배열(ToCharArray)로 변환합니다.
  2. 문자 배열에 루프 적용
  3. 그런 다음 문자열 바꾸기 기능을 적용합니다("바꾸고 싶은 문자열");

언급URL : https://stackoverflow.com/questions/3958955/how-to-remove-duplicate-white-spaces-in-string-using-java

반응형