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개의 스텝으로 실시할 수 있습니다.
- 문자열을 문자 배열(ToCharArray)로 변환합니다.
- 문자 배열에 루프 적용
- 그런 다음 문자열 바꾸기 기능을 적용합니다("바꾸고 싶은 문자열");
언급URL : https://stackoverflow.com/questions/3958955/how-to-remove-duplicate-white-spaces-in-string-using-java
'programing' 카테고리의 다른 글
두 개의 dicts(양쪽에 나타나는 키의 값을 추가하는)를 조합하는 피토닉 방법이 있습니까? (0) | 2022.09.05 |
---|---|
특정 행에만 MySQL 권한을 부여하는 방법 (0) | 2022.09.05 |
사용자 'User'@%'와 'User'@'localhost'가 같지 않습니까? (0) | 2022.09.05 |
원인: org.flywaydb.core.api.Flyway Exception:검증에 실패했습니다.마이그레이션 2에 대한 마이그레이션 체크섬 불일치 (0) | 2022.09.05 |
Vue: 등록하기 전에 vuex 스토어에서 사용자 설정 (0) | 2022.09.05 |