Java에서 문자열의 문자를 어떻게 바꾸나요?
Java를 사용하여 텍스트 행을 살펴보고 모든 앰퍼샌드 기호 ( &)를 XML 엔티티 참조로 바꾸고 싶습니다 &.
Scanner 클래스를 사용하여 텍스트 줄을 스캔 한 다음 텍스트의 각 단어를 스캔합니다. 그런 CharacterIterator다음를 사용 하여 단어의 각 문자를 반복합니다. 하지만 캐릭터를 대체하려면 어떻게해야합니까? 첫째, 문자열은 불변 객체입니다. 둘째, 문자 ( &)를 여러 문자 ( amp&;) 로 바꾸고 싶습니다 . 어떻게 접근해야합니까?
CharacterIterator it = new StringCharacterIterator(token);
for(char ch = it.first(); ch != CharacterIterator.DONE; ch = it.next()) {
if(ch == '&') {
}
}
String.replace()또는 String.replaceAll()대신 사용해보십시오 .
String my_new_str = my_str.replace("&", "&");
(둘 다 모든 항목을 대체하며 replaceAll정규식 사용을 허용합니다.)
간단한 대답은 다음과 같습니다.
token = token.replace("&", "&");
replaceAll과 비교 한 이름에도 불구하고 replace는 replaceAll을 수행하지만 정규식을 사용하지 않습니다. 이는 성능 및 모범 사례 관점에서 모두 정상인 것처럼 보입니다. 실수로 정규식을 사용하지 마십시오. 그들은 당신이주의를 기울이지 않을 특별한 캐릭터 요구 사항이 있기 때문에).
Sean Bright의 대답은 성능 및 성능 테스트에 대한 추가 목표 요구 사항이없는 성능 관점에서 생각할 가치가있는만큼 좋을 것입니다.이 코드가 성능에 대한 핫스팟이라는 것을 이미 알고 있다면 질문의 출처 인 경우입니다. 확실히 반대표를받을 자격이 없습니다. 동기화가 필요하지 않으면 StringBuffer 대신 StringBuilder를 사용하십시오.
즉, 여기에는 다소 더 깊은 잠재적 인 문제가 있습니다. 이스케이프 문자는 많은 라이브러리가 해결하는 알려진 문제입니다. XML의 CDATA 섹션에 데이터를 래핑하는 것을 고려하거나 XML 라이브러리 (현재 JDK와 함께 제공되는 라이브러리 포함)를 사용하여 실제로 XML을 올바르게 생성하여 인코딩을 처리 할 수 있습니다. ).
Apache에는 Commons Lang의 일부로 이스케이프 라이브러리 도 있습니다 .
StringBuilder s = new StringBuilder(token.length());
CharacterIterator it = new StringCharacterIterator(token);
for (char ch = it.first(); ch != CharacterIterator.DONE; ch = it.next()) {
switch (ch) {
case '&':
s.append("&");
break;
case '<':
s.append("<");
break;
case '>':
s.append(">");
break;
default:
s.append(ch);
break;
}
}
token = s.toString();
이미 대체 된 발생을 대체하지 않는지 확인하는 것이 좋습니다. 이를 위해 부정적 예측이있는 정규식을 사용할 수 있습니다.
예를 들면 :
String str = "sdasdasa&adas&dasdasa";
str = str.replaceAll("&(?!amp;)", "&");
결과적으로 " sdasdasa&adas&dasdasa" 문자열이 생성됩니다 .
정규식 패턴 "& (?! amp;)"는 기본적으로 다음과 같이 말합니다. 뒤에 'amp;'가없는 '&'항목과 일치합니다.
문제의 모든 데이터를 포함하는 문자열을 만든 다음 아래와 같이 String.replaceAll () 을 사용 하십시오 .
String result = yourString.replaceAll("&", "&");
이스케이프 문자열 은 까다로울 수 있습니다. 특히 유니 코드를 고려하려는 경우 더욱 그렇습니다. XML이 더 간단한 형식 / 언어 중 하나라고 생각하지만 여전히 탈출 할 수 있습니다. Apache Commons Lang의 StringEscapeUtils 클래스와 편리한 escapeXml 메서드를 살펴 보는 것이 좋습니다 .
Try this code.You can replace any character with another given character. Here I tried to replace the letter 'a' with "-" character for the give string "abcdeaa"
OutPut -->_bcdef__
public class Replace {
public static void replaceChar(String str,String target){
String result = str.replaceAll(target, "_");
System.out.println(result);
}
public static void main(String[] args) {
replaceChar("abcdefaa","a");
}
}
If you're using Spring you can simply call HtmlUtils.htmlEscape(String input) which will handle the '&' to '&' translation.
//I think this will work, you don't have to replace on the even, it's just an example.
public void emphasize(String phrase, char ch)
{
char phraseArray[] = phrase.toCharArray();
for(int i=0; i< phrase.length(); i++)
{
if(i%2==0)// even number
{
String value = Character.toString(phraseArray[i]);
value = value.replace(value,"*");
phraseArray[i] = value.charAt(0);
}
}
}
참고URL : https://stackoverflow.com/questions/1234510/how-do-i-replace-a-character-in-a-string-in-java
'Program Club' 카테고리의 다른 글
| 파이썬에서 두 개의 n 차원 벡터 사이의 각도 (0) | 2020.11.25 |
|---|---|
| 신속하게 문자열에서 숫자가 아닌 모든 문자를 제거하십시오. (0) | 2020.11.25 |
| 투표 경쟁에서 사기꾼 사냥 (0) | 2020.11.24 |
| IContainer 해결 (0) | 2020.11.24 |
| 어셈블리 'netstandard, Version = 2.0.0.0'에 대한 참조를 추가해야합니다. (0) | 2020.11.24 |