programing

문자열을 문자별로 반복하는 방법

abcjava 2023. 9. 8. 21:05
반응형

문자열을 문자별로 반복하는 방법

문자열이 있는데 "foo"가 발생할 때마다 스캔을 하고 그 다음에 나오는 모든 텍스트를 1초까지 읽어야 합니다.". 러스트에는 문자열 기능이 없기 때문에 문자열을 스캔하는 문자로 반복해야 합니다.제가 이걸 어떻게 하죠?

편집: 녹스&str가 있고 방법이 있습니다.

나는 그것을 위해 글자를 스캔하는 것을 반복해야 합니다.

메서드는 문자열의 문자 위에 반복기를 반환합니다.

for c in my_str.chars() { 
    // do something with `c`
}

for (i, c) in my_str.chars().enumerate() {
    // do something with character `c` and index `i`
}

각 문자의 바이트 오프셋에 관심이 있는 경우 를 사용할 수 있습니다.

들여다보기.peekable(), 사용.peek()앞을 내다보았으니깐단순한 문자 벡터가 아닌 UTF-8 코드 포인트를 지원하기 때문에 이렇게 포장됩니다.

다음의 벡터를 생성할 수도 있습니다.char그리고 거기서부터 작업을 하지만 시간과 공간을 더 많이 사용하게 됩니다.

let my_chars: Vec<_> = mystr.chars().collect();

"캐릭터"의 개념은 매우 모호하며 작업하는 데이터의 종류에 따라 다양한 의미를 가질 수 있습니다.가장 확실한 답은 방법입니다.그러나 이것은 광고대로 작동하지 않습니다.사용자에게 단일 "문자"로 보이는 것이 실제로 여러 유니코드 코드 포인트로 구성되어 있을 수 있으며, 이로 인해 예상치 못한 결과가 발생할 수 있습니다.

"a̐".chars() // => ['a', '\u{310}']

많은 문자열 처리의 경우에는 자소로 작업하려고 합니다.자소는 문자열 슬라이스로 표시된 하나 이상의 유니코드 코드 포인트로 구성됩니다.이러한 지도는 "인물"에 대한 인간의 인식에 더 적합합니다.자소의 반복자를 만들려면 상자를 사용합니다.

use unicode_segmentation::UnicodeSegmentation;

for grapheme in my_str.graphemes(true) {
    // ...
}

raw ASCII를 사용하는 경우 위의 내용 중 하나도 적용되지 않으며, 간단히 사용할 수 있습니다.bytes반복자:

for byte in my_str.bytes() {
    // ...
}

그러나 ASCII로 작업하는 경우에는 사용하지 않아야 합니다.String/&str조금이라도 쓰고 대신에 쓰시오Vec<u8>/&[u8]직접적으로.

fn main() {
let s = "Rust is a programming language";
for i in s.chars() {
    print!("{}", i);
}}

출력: 녹은 프로그래밍 언어입니다.

나는 문자열의 각 요소를 반복하기 위해 chars() 메서드를 사용합니다.

언급URL : https://stackoverflow.com/questions/22118221/how-do-you-iterate-over-a-string-by-character

반응형