문자열에서 모든 문자 제거
사용할 수 있습니다.
String str = "TextX Xto modifyX";
str = str.replace('X','');//that does not work because there is no such character ''
캐릭터의 발생을 모두 제거할 수 있는 방법이 있습니까?X
자바 문자열에서요?
이거 해봤는데 내가 원하는 게 아니야.str.replace('X',' '); //replace with space
인수를 필요로 하는 과부하를 사용해 보십시오(예:String
)가 아니라char
:
str = str.replace("X", "");
사용.
public String replaceAll(String regex, String replacement)
효과가 있습니다.
용도는 다음과 같습니다.str.replace("X", "");
.
실행 중
"Xlakjsdf Xxx".replaceAll("X", "");
반환:
lakjsdf xx
Java String을 사용하여 무언가를 하고 싶다면 Commons Lang String Utils를 참고하십시오.
StringUtils.remove("TextX Xto modifyX", 'X');
String test = "09-09-2012";
String arr [] = test.split("-");
String ans = "";
for(String t : arr)
ans+=t;
다음은 String에서 문자를 삭제한 예입니다.
안녕하세요 아래의 코드를 사용해 보십시오.
public class RemoveCharacter {
public static void main(String[] args){
String str = "MXy nameX iXs farXazX";
char x = 'X';
System.out.println(removeChr(str,x));
}
public static String removeChr(String str, char x){
StringBuilder strBuilder = new StringBuilder();
char[] rmString = str.toCharArray();
for(int i=0; i<rmString.length; i++){
if(rmString[i] == x){
} else {
strBuilder.append(rmString[i]);
}
}
return strBuilder.toString();
}
}
이 경우 RegEx를 사용하는 것이 좋습니다.
str = str.replace(/X/g, '');
여기서 g는 글로벌함을 의미하므로 문자열 전체를 통과하고 모든 X를 ""로 바꿉니다.X와 x를 모두 바꿉니다.
str = str.replace(/X|x/g, '');
(여기서 내 바이올린을 보라: 바이올린)
replace 대신 replaceAll 사용
str = str.replaceAll("X,"");
이것으로 원하는 답을 얻을 수 있을 것입니다.
퍼포먼스 벤치마크를 사용하여 주요 답변을 평가하여 현재 선택된 답변으로 인해 비용이 많이 드는 정규식 작업이 발생할 수 있다는 우려를 확인
제공된 답변은 3가지 주요 스타일로 제공됩니다(JavaScript 답변 무시).
- 후드 아래에 regex를 사용하는 String.replace(charsToDelete, "")를 사용합니다.
- 람다 사용
- 간단한 Java 구현 사용
코드 사이즈에 관해서는 String.replace가 가장 간결합니다.간단한 Java 구현은 Lambda보다 약간 작고 깔끔합니다(IMHO). (오해하지 마세요.Lambdas는 적절한 장소에서 자주 사용합니다.)
실행 속도는 가장 빠른 것부터 가장 느린 것까지입니다.단순한 Java 구현, Lambda, 다음으로 String.replace() (regex를 호출합니다).
지금까지 가장 빠른 구현은 String Builder 버퍼를 가능한 최대 결과 길이로 사전 할당하고 "chars to delete" 문자열에 없는 버퍼에 문자를 추가하도록 튜닝된 단순한 Java 구현입니다.이것에 의해, 길이가 16 문자(String Builder 의 디폴트 할당)를 넘는 문자열에 대해서 발생하는 재할당을 회피할 수 있습니다.또, 발생하는 문자열의 카피로부터 문자를 삭제했을 때의 「슬라이드 레프트」퍼포먼스 히트도 회피할 수 있습니다.
다음 코드는 간단한 벤치마크 테스트를 실행하여 각 구현을 1,000,000회 실행하고 경과 시간을 기록합니다.
정확한 결과는 각 주행에 따라 다르지만 성능 순서는 변경되지 않습니다.
Start simple Java implementation
Time: 157 ms
Start Lambda implementation
Time: 253 ms
Start String.replace implementation
Time: 634 ms
Lambda 구현(Kaplan의 답변에서 복사한 것처럼)은 삭제되는 문자의 오른쪽으로 모든 문자의 "왼쪽으로 1 이동"을 수행하기 때문에 더 느릴 수 있습니다.삭제가 필요한 문자가 많은 문자열이 길수록 이 문제는 더욱 심각해집니다.또한 Lambda 구현 자체에 약간의 오버헤드가 있을 수 있습니다.
String.replace 실장은 regex를 사용하며 콜마다 regex를 "컴파일"합니다.이를 최적화하려면 regex를 직접 사용하여 컴파일된 패턴을 캐시하여 매번 컴파일하는 비용을 회피해야 합니다.
package com.sample;
import java.util.function.BiFunction;
import java.util.stream.IntStream;
public class Main {
static public String deleteCharsSimple(String fromString, String charsToDelete)
{
StringBuilder buf = new StringBuilder(fromString.length()); // Preallocate to max possible result length
for(int i = 0; i < fromString.length(); i++)
if (charsToDelete.indexOf(fromString.charAt(i)) < 0)
buf.append(fromString.charAt(i)); // char not in chars to delete so add it
return buf.toString();
}
static public String deleteCharsLambda(String fromString1, String charsToDelete)
{
BiFunction<String, String, String> deleteChars = (fromString, chars) -> {
StringBuilder buf = new StringBuilder(fromString);
IntStream.range(0, buf.length()).forEach(i -> {
while (i < buf.length() && chars.indexOf(buf.charAt(i)) >= 0)
buf.deleteCharAt(i);
});
return (buf.toString());
};
return deleteChars.apply(fromString1, charsToDelete);
}
static public String deleteCharsReplace(String fromString, String charsToDelete)
{
return fromString.replace(charsToDelete, "");
}
public static void main(String[] args)
{
String str = "XXXTextX XXto modifyX";
String charsToDelete = "X"; // Should only be one char as per OP's requirement
long start, end;
System.out.println("Start simple");
start = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++)
deleteCharsSimple(str, charsToDelete);
end = System.currentTimeMillis();
System.out.println("Time: " + (end - start));
System.out.println("Start lambda");
start = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++)
deleteCharsLambda(str, charsToDelete);
end = System.currentTimeMillis();
System.out.println("Time: " + (end - start));
System.out.println("Start replace");
start = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++)
deleteCharsReplace(str, charsToDelete);
end = System.currentTimeMillis();
System.out.println("Time: " + (end - start));
}
}
여기에 문자열로 전달된 모든 문자를 제거하는 람다 함수가 있습니다.
BiFunction<String,String,String> deleteChars = (fromString, chars) -> {
StringBuilder buf = new StringBuilder( fromString );
IntStream.range( 0, buf.length() ).forEach( i -> {
while( i < buf.length() && chars.indexOf( buf.charAt( i ) ) >= 0 )
buf.deleteCharAt( i );
} );
return( buf.toString() );
};
String str = "TextX XYto modifyZ";
deleteChars.apply( str, "XYZ" ); // –> "Text to modify"
이 해결책 acount에 그 결과로 현악 – 차이점으로 솔루션에서는 String이 다음과같이 처리됩니다 이 것이 필요하다.replace()
– 때 문자를 제거하는 시작에서 상속됨보다 크게 되지 않았다.– 문자를 삭제할 때 시작 문자열보다 크게 되지 않습니다.반면 이 때문에, 할당과 복사를 반복하는 것을 회피하면서, 문자 단위로 에 추가할 수 있습니다에 character-wise을 추가하는 그래서 반복 allocating, 복사를 피할 수 있습니다.StringBuilder
~하듯이로replace()
does.한다.
무의미한 세대인의 무의미한 세대는 언급하지 않을 것것도 없고 말할 것은.Pattern
★★★★★★★★★★★★★★★★★」Matcher
의 인스턴스에 인스턴스replace()
그것은 제거를 위한 필요하지 않았다.제거에 전혀 필요없는 것들입니다.
차이에서 와의에 차이replace()
이 솔루션은 한번의 사건에 여러 캐릭터가 삭제할 수 있습니다.이 솔루션은 한 번에 여러 문자를 삭제할 수 있습니다.
교체 시 대괄호 안에 삭제해야 하는 문자를 넣어야 합니다.코드 예는 다음과 같습니다.
String s = "$116.42".replaceAll("[$]", "");
…또 다른 람다
원본에서 새 문자열을 복사하지만 삭제할 문자를 생략합니다.
String text = "removing a special character from a string";
int delete = 'e';
int[] arr = text.codePoints().filter( c -> c != delete ).toArray();
String rslt = new String( arr, 0, arr.length );
:다음과 같은기능이 있습니다를 준다.rmoving a spcial charactr from a string
package com.acn.demo.action;
public class RemoveCharFromString {
static String input = "";
public static void main(String[] args) {
input = "abadbbeb34erterb";
char token = 'b';
removeChar(token);
}
private static void removeChar(char token) {
// TODO Auto-generated method stub
System.out.println(input);
for (int i=0;i<input.length();i++) {
if (input.charAt(i) == token) {
input = input.replace(input.charAt(i), ' ');
System.out.println("MATCH FOUND");
}
input = input.replaceAll(" ", "");
System.out.println(input);
}
}
}
당신은사용할 수 있습니다 사용할 수 있다.str = str.replace("X", "");
참고로''
는 빈 "(는)"입니다.'\0'
이렇게 하면 될 것 같아요.str = str.replace('X', '\0');
★★★★★★ 。
언급URL : https://stackoverflow.com/questions/4576352/remove-all-occurrences-of-char-from-string
'itsource' 카테고리의 다른 글
반복 조건부 Vue.js 코드를 리팩터하려면 어떻게 해야 하나요? (0) | 2022.08.30 |
---|---|
VueJS 컴포넌트 시스템 아키텍처 (0) | 2022.08.30 |
mathjax + vue 재렌더링 방정식 (0) | 2022.08.30 |
매핑되지 않은 클래스 변수를 최대 절전 모드로 무시 (0) | 2022.08.30 |
목록의 초기 렌더링에 있는 목록 항목(스태거)에 애니메이션을 적용합니다. (0) | 2022.08.30 |