작은 자바 프로그램을 작성하고 있습니다 :
- 텍스트를 문자열로받습니다
- 2 개의 문자를받습니다
내가하려는 것은 "찾기 및 바꾸기"처럼 들리지만 같지 않으므로이를 지우는 것이 중요하다고 생각했습니다.
어쨌든이 텍스트를 가져 와서 첫 번째 배열의 문자가 텍스트의 문자와 일치하는지 확인하고, 그렇다면 두 번째 문자 배열의 일치하는 문자 (색인에 따라)로 바꿉니다.
예를 들어 설명하겠습니다 : 내 텍스트 (문자열)는 "java is awesome!"; "absm"과 "! @ * $"라는 두 개의 배열 (char [])이 있습니다.
원하는 결과는 'a'를 '!'로 바꾸는 것입니다. , 'b'~ '@'등 .. 결과 텍스트는 다음과 같습니다.
"자바는 대단하다!" ->"j @ v @ i * @ w * o $e!"로 변경되었습니다.
이 작업을 수행하는 가장 효율적인 방법과 이유는 무엇입니까? 텍스트를 반복하는 것에 대해 생각했지만 그렇게 효율적이지 않다는 것을 알았습니다.
(StringBuilder/문자열 클래스를 사용할 수 있습니다)
- 답변 # 1이 방법은 StringBuilder를 사용하여 문자를 변경하기 때문에 효율적입니다 (문자열을 사용하는 경우 변경할 수 없기 때문에 매번 새 문자를 작성해야합니다). 또한 수행해야하는 패스의 양을 최소화합니다 ( 1은 텍스트 문자열을 통과하고 n은 첫 번째 배열을 통과합니다 .n = text.length ())
- 답변 # 2
적어도 참조로 StringUtils.replaceEach를 찾고 있다고 생각합니다.
- 답변 # 3
얼마나 효율적이어야합니까? 수백, 수천, 수백만 단어로이 작업을 수행하고 있습니까 ???
가장 효율적인지 모르겠지만 문자열
indexOf()
를 사용할 수 있습니다 가능한 각 토큰에 대한 메소드를 사용하면 토큰이 있는지 알려주고 동시에 해당 인덱스를 다른 배열의 해당 문자로 바꿀 수 있습니다.코드 방식으로 (이것은 의사 코드의 절반입니다) :
for(each of first array) { int temp = YourString.indexOf(current array field); if (temp >=0) { replace with other array } }
- 답변 # 4
지도에있는 2 개의 배열을 넣으십시오
Map<Character, Character> //or Map of Strings
키가 "a", "b"등이고 값은 "@"등으로 대체하려는 문자입니다.
그런 다음 단순히 문자열의 키를 값으로 바꿉니다. - 답변 # 5
이와 같은 작은 것들의 경우 indexOf () 검색이 맵보다 빠르지 만 허용되는 답변의 내부 루프를 "피할"수 있습니다. 물론 루프는 String.indexOf () 안에 여전히 존재하지만 JIT 컴파일러가 많이 사용하기 때문에 요금에 맞게 최적화 될 수 있습니다.
static String replaceChars(String source, String from, String to) { StringBuilder dest = new StringBuilder(source); for ( int i = 0; i < source.length(); i++ ) { int foundAt = from.indexOf(source.charAt(i)); if ( foundAt >= 0 ) dest.setCharAt(i,to.charAt(foundAt)); } return dest.toString(); }
업데이트 : Oracle/Sun JIT는 indexOf ()에 대해 적어도 일부 프로세서에서 SIMD를 사용하므로 예상보다 훨씬 빠릅니다.
관련 자료
- python - 문자열에서 여러 문자를 바꾸는 가장 좋은 방법
- python - 문자열에서 문자 목록을 바꾸는 방법
- 자바 스크립트 문자열은 한 번에 하나씩 교체하고 배열에 추가합니다
- bash - 문자열 패턴의 모든 발생을 문자열이 발견 된 순서에 따라 문자열과 일치하는 숫자로 바꾸는 방법
- typescript - 문자열 TYPE을 문자 TYPE의 배열로 변환
- unicode - Java에서 유효하지 않은 문자를 대체하여 UTF8 문자열을 UCS-2로 변환
- python - 문자열 수정 코드를보다 효율적으로 만들기
- regex - 다른 문자열이 뒤에 나오지 않으면 문자열을 교체합니다
- javascript - nodejs에서 작동하지 않는 여러 문자열 바꾸기 기능
- javascript - 문자열에서 [] 안의 텍스트를 바꾸는 방법은 무엇입니까?
- c# - 문자열 내부의 텍스트 교체
- 여러 줄 문자열의 일부를 sed로 바꾸는 방법
- python - 문자열에서 알려지지 않은 특정 단어 교체
- 문자열에서 특정 문자를 바꾸는 방법 (파이썬)
- javascript - 문자열에서 여러 "\ n"을 일치시키고 단일 "\ n"으로 바꾸는 방법
- python - Pandas 데이터 프레임에서 특정 문자열을 포함하지 않는 모든 값을 바꿉니다
- 자바 스크립트에서 문자열의 선행 0을 최대 3 개로 바꿉니다
- r - 문자열 3의 요소 교체 - 패턴 뒤 10 자리
- bash - Linux에서 sed를 사용하여 문자열을 여러 세미콜론 및 특수 문자로 바꾸는 방법
- python - 문자열이 특정 값으로 끝나는 경우 값을 바꿉니다
- java : String.valueOf() 대 Object.toString()
- java : StringBuilder.append()는 인수를 위해 메모리에 새로운 String 객체를 생성합니까?
- Java를 사용하여 String에서 문자의 발생을 찾는 방법은 무엇입니까?
- Java String.indexOf 및 빈 문자열
- java.lang.ArrayIndexOutOfBoundsException: 길이 1의 범위를 벗어난 인덱스 1 오류가 수신되고 있으며 이유를 확인할 수 없습니다.
- Java가 참조로 전달되는 경우. 왜 이렇게 반환된 객체를 수정할 수 없습니까?
- java : printDialog() 없이 어떻게 인쇄()합니까?
- java : Android -자바 -단어 수
- HTML에서 기능을 수정하고 페이지를 다시 로드하는 JavaScript
- java : charArray에서 모음을 소문자로 만들기