Java 문자열에 있는 두 개 이상의 공백을 단일 공백으로 대체하고 선행 및 후행 공백을 삭제하는 방법
Java에서 이 문자열을 빠르고 쉽게 변경할 수 있는 방법을 찾고 있습니다.
" hello there "
이렇게 생긴 것에 대해서
"hello there"
문자열 시작 부분에 있는 하나 이상의 공백이 사라지도록 하는 경우를 제외하고 여러 개의 공백을 모두 단일 공백으로 바꿉니다.
이런 건 날 부분적으로 데려다 줘
String mytext = " hello there ";
mytext = mytext.replaceAll("( )+", " ");
하지만 꼭 그렇진 않아요
이것을 시험해 보세요.
String after = before.trim().replaceAll(" +", " ");
「 」를 참조해 주세요.
String.trim()
- 선행 및 후행 공백을 생략하고 문자열 복사본을 반환합니다.
- regular-expressions.info/Repetition
.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"
Commons Apache 사용StringUtils.normalizeSpace(String str)
방법.여기서 문서 보기
딱 .sValue = sValue.trim().replaceAll("\\s+", " ");
다음 코드는 단어 사이의 공백을 압축하고 문자열의 처음과 끝에 있는 공백을 제거합니다.
String input = "\n\n\n a string with many spaces, \n"+
" a \t tab and a newline\n\n";
String output = input.trim().replaceAll("\\s+", " ");
System.out.println(output);
출력됩니다.a string with many spaces, a tab and a newline
공백, 탭, 줄바꿈 등 인쇄할 수 없는 문자는 모두 압축 또는 삭제됩니다.
상세한 것에 대하여는, 다음의 메뉴얼을 참조해 주세요.
- String #trim() 메서드
- String #replace All(String regex, String replace) 메서드
- Java 정규 표현식 구현에 대한 자세한 내용은 패턴 클래스의 설명서를 참조하십시오.
"[ ]{2,}"
두 개 이상의 공백과 일치합니다.
String mytext = " hello there ";
//without trim -> " hello there"
//with trim -> "hello there"
mytext = mytext.trim().replaceAll("[ ]{2,}", " ");
System.out.println(mytext);
출력:
hello there
trim() 메서드는 선행 및 후행 공백을 삭제하고 regex "\s+"와 함께 replaceAll("regex", "string to replace") 메서드를 사용하면 여러 공백과 일치하며 단일 공백으로 대체됩니다.
myText = myText.trim().replaceAll("\\s+"," ");
의 및 공간을 하려면 , 「」를 합니다.String#trim()
아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아,mytext.replaceAll("( )+", " ")
.
먼저 사용하실 수 있습니다.String.trim()
정규식을 대신하다
이거 드셔보세요.
샘플 코드
String str = " hello there ";
System.out.println(str.replaceAll("( +)"," ").trim());
산출량
hello there
먼저 모든 공간을 단일 공간으로 바꿉니다.을 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★.String
★★★★★★★★★★★★★★★★★★부터String
의 끝String
경우 이 모두 .String
、 [ of Start of the ]에 .String
의 끝String
그래서 손질해야 돼요.이 원하는 을 얻을 수 있을 때String
.
String blogName = "how to do in java . com";
String nameWithProperSpacing = blogName.replaceAll("\\\s+", " ");
트림()
선행 및 후행 공간만 삭제합니다.
Java Doc에서 "이 문자열의 값이 이 문자열이고 선행 및 후행 공백이 제거된 문자열을 반환합니다."
System.out.println(" D ev Dum my ".trim());
"Dev Dum my"
replace(), replaceAll()
워드의 모든 빈 문자열을 바꿉니다.
System.out.println(" D ev Dum my ".replace(" ",""));
System.out.println(" D ev Dum my ".replaceAll(" ",""));
System.out.println(" D ev Dum my ".replaceAll("\\s+",""));
출력:
"DevDummy"
"DevDummy"
"DevDummy"
주의: "\s+"는 공백 문자와 유사한 정규 표현입니다.
참고 자료 : https://www.codedjava.com/2018/06/replace-all-spaces-in-string-trim.html
지금까지 정답이 많이 나왔고 많은 표가 올라오고 있습니다.단, 전술한 방법은 동작하지만 실제로는 최적화되지 않거나 읽을 수 없습니다.저는 최근에 모든 개발자들이 좋아할 만한 솔루션을 발견했습니다.
String nameWithProperSpacing = StringUtils.normalizeSpace( stringWithLotOfSpaces );
이제 끝입니다.이것은 읽기 쉬운 해결책입니다.
코틀린에선 이렇게 생겼을 거야
val input = "\n\n\n a string with many spaces, \n"
val cleanedInput = input.trim().replace(Regex("(\\s)+"), " ")
룩어라운드를 사용할 수도 있습니다.
test.replaceAll("^ +| +$|(?<= ) ", "");
또는
test.replaceAll("^ +| +$| (?= )", "")
<space>(?= )
는 공백 문자 뒤에 다른 공백 문자가 이어지는 것과 일치합니다.따라서 연속된 공간에서는 마지막 공간을 제외한 모든 공간과 일치합니다. 공백 뒤에 공백 문자가 붙지 않기 때문입니다.이렇게 하면 제거 작업 후 연속된 공간을 위한 단일 공간이 남습니다.
예:
String[] tests = {
" x ", // [x]
" 1 2 3 ", // [1 2 3]
"", // []
" ", // []
};
for (String test : tests) {
System.out.format("[%s]%n",
test.replaceAll("^ +| +$| (?= )", "")
);
}
String str = " hello world"
먼저 공간을 줄이다
str = str.trim().replaceAll(" +", " ");
첫 글자와 소문자를 모두 대문자로 하다
str = str.substring(0,1).toUpperCase() +str.substring(1,str.length()).toLowerCase();
너는 이렇게 해야 한다
String mytext = " hello there ";
mytext = mytext.replaceAll("( +)", " ");
+를 둥근 괄호 안에 넣습니다.
String str = " this is string ";
str = str.replaceAll("\\s+", " ").trim();
것은, 을 참조하십시오.String.replaceAll
.
을 "\s"
로 and and and and and로 " "
.
'아예'를 사용합니다.String.trim
.
이건 내게 효과가 있었다.
scan= filter(scan, " [\\s]+", " ");
scan= sac.trim();
여기서 filter는 함수를 따르고 scan은 입력 문자열입니다.
public String filter(String scan, String regex, String replace) {
StringBuffer sb = new StringBuffer();
Pattern pt = Pattern.compile(regex);
Matcher m = pt.matcher(scan);
while (m.find()) {
m.appendReplacement(sb, replace);
}
m.appendTail(sb);
return sb.toString();
}
문자열 내의 빈 공간을 제거하는 가장 간단한 방법입니다.
public String removeWhiteSpaces(String returnString){
returnString = returnString.trim().replaceAll("^ +| +$|( )+", " ");
return returnString;
}
확인...
public static void main(String[] args) {
String s = "A B C D E F G\tH I\rJ\nK\tL";
System.out.println("Current : "+s);
System.out.println("Single Space : "+singleSpace(s));
System.out.println("Space count : "+spaceCount(s));
System.out.format("Replace all = %s", s.replaceAll("\\s+", ""));
// Example where it uses the most.
String s = "My name is yashwanth . M";
String s2 = "My nameis yashwanth.M";
System.out.println("Normal : "+s.equals(s2));
System.out.println("Replace : "+s.replaceAll("\\s+", "").equals(s2.replaceAll("\\s+", "")));
}
문자열에 단일 공간만 포함되어 있는 경우 replace()는 대체되지 않습니다.
공백이 여러 개인 경우 replace() 액션이 수행되고 공백이 제거됩니다.
public static String singleSpace(String str){
return str.replaceAll(" +| +|\t|\r|\n","");
}
문자열의 공백 수를 카운트합니다.
public static String spaceCount(String str){
int i = 0;
while(str.indexOf(" ") > -1){
//str = str.replaceFirst(" ", ""+(i++));
str = str.replaceFirst(Pattern.quote(" "), ""+(i++));
}
return str;
}
패턴.quote("?")는 리터럴 패턴 문자열을 반환합니다.
regex를 더 나은 해결책으로 사용하여 두 번째 답을 찾기 전의 방법.누군가 이 코드가 필요할지도 몰라
private String replaceMultipleSpacesFromString(String s){
if(s.length() == 0 ) return "";
int timesSpace = 0;
String res = "";
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if(c == ' '){
timesSpace++;
if(timesSpace < 2)
res += c;
}else{
res += c;
timesSpace = 0;
}
}
return res.trim();
}
스트림 버전, 공간 및 탭을 필터링합니다.
Stream.of(str.split("[ \\t]")).filter(s -> s.length() > 0).collect(Collectors.joining(" "))
String myText = " Hello World ";
myText = myText.trim().replace(/ +(?= )/g,'');
// Output: "Hello World"
string.replaceAll("\s+), ";
프로젝트에서 이미 Guava(v. 19+)를 사용하고 있는 경우 다음을 사용할 수 있습니다.
CharMatcher.whitespace().trimAndCollapseFrom(input, ' ');
또는 SPACE 기호를 정확하게 삭제할 필요가 있는 경우(
또는U+0020
, 기타 공백 참조) 사용:
CharMatcher.anyOf(" ").trimAndCollapseFrom(input, ' ');
public class RemoveExtraSpacesEfficient {
public static void main(String[] args) {
String s = "my name is mr space ";
char[] charArray = s.toCharArray();
char prev = s.charAt(0);
for (int i = 0; i < charArray.length; i++) {
char cur = charArray[i];
if (cur == ' ' && prev == ' ') {
} else {
System.out.print(cur);
}
prev = cur;
}
}
}
위의 솔루션은 Java 함수를 사용하지 않고 O(n)의 복잡도를 갖는 알고리즘입니다.
아래 코드를 사용하십시오.
package com.myjava.string;
import java.util.StringTokenizer;
public class MyStrRemoveMultSpaces {
public static void main(String a[]){
String str = "String With Multiple Spaces";
StringTokenizer st = new StringTokenizer(str, " ");
StringBuffer sb = new StringBuffer();
while(st.hasMoreElements()){
sb.append(st.nextElement()).append(" ");
}
System.out.println(sb.toString().trim());
}
}
안녕, 늦어서 미안해!고객님이 찾고 있는 최선의 가장 효율적인 답변을 다음에 제시하겠습니다.
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class MyPatternReplace {
public String replaceWithPattern(String str,String replace){
Pattern ptn = Pattern.compile("\\s+");
Matcher mtch = ptn.matcher(str);
return mtch.replaceAll(replace);
}
public static void main(String a[]){
String str = "My name is kingkon. ";
MyPatternReplace mpr = new MyPatternReplace();
System.out.println(mpr.replaceWithPattern(str, " "));
}
이 예의 출력은 "My name is kingkon" 입니다.
단, 이 메서드는 문자열의 "\n"도 삭제합니다.따라서 이 방법을 사용하지 않으려면 다음과 같은 간단한 방법을 사용하십시오.
while (str.contains(" ")){ //2 spaces
str = str.replace(" ", " "); //(2 spaces, 1 space)
}
또한 선행 및 후행 공백을 제거하려면 다음을 추가하십시오.
str = str.trim();
언급URL : https://stackoverflow.com/questions/2932392/java-how-to-replace-2-or-more-spaces-with-single-space-in-string-and-delete-lead
'programing' 카테고리의 다른 글
vuex, axios에서 불필요한 요청을 모두 취소하는 방법 (0) | 2022.08.13 |
---|---|
스토어 내에서 액션에 액세스하거나 디스패치를 하는 방법 (0) | 2022.08.13 |
One-past-malloc을 가리키는 포인터를 사용하는 것이 잘 정의되어 있습니까? (0) | 2022.08.13 |
제공/주입된 VUE 컴포넌트를 유닛 테스트하는 방법 (0) | 2022.08.11 |
VueJS 커스텀 디렉티브 + import 이벤트 (0) | 2022.08.11 |