הסרת מרכאות ממחרוזת

Rust:
הסרת מרכאות ממחרוזת

איך לעשות:

fn remove_quotes(s: &str) -> String {
    s.trim_matches(|c| c == '\"' || c == '\'').to_string()
}

fn main() {
    let quoted_str = "\"שלום, רוסטצ'יאנים!\"";
    let cleaned_str = remove_quotes(quoted_str);
    println!("{}", cleaned_str);
    // Output: שלום, רוסטצ'יאנים!
}

לפעמים יש לך מחרוזת עם ציטוטים מעורבים, כמו זו:

fn main() {
    let mixed_quoted = "'רוסט אומרת: \"שלום, עולם!\"'";
    let cleaned_str = remove_quotes(mixed_quoted);
    println!("{}", cleaned_str);
    // Output: רוסט אומרת: "שלום, עולם!"
}

כאן, רק הציטוטים החיצוניים ביותר מוסרים.

צלילה עמוקה

כאשר מסירים ציטוטים ממחרוזת, ייתכן ותתהה למה זה לא פשוט .replace("\"", ""). בתחילה, העיסוק בטקסט היה פחות מתוקנן, ומערכות שונות היו להן דרכים שונות לאחסון ולהעברת טקסט, לעיתים קרובות עם סוג של ‘רצף בריחה’ עבור תווים מיוחדים. המתודה trim_matches של Rust גמישה יותר, מאפשרת לך לציין תווים מרובים לקיצוץ, ואם לקצץ מהתחלה (קידומת), מהסוף (סיומת), או משני צידי המחרוזת.

כמובן, ישנן חלופות. Regex הוא כוח עצום למניפולציה על מחרוזות, מסוגל להתאים לתבניות מורכבות, ויהיה קילוף עודף רק להסרת ציטוטים. ספריות כמו trim_in_place יכולות להציע קיצוץ במקום ללא העלויות של יצירת אובייקט String חדש, שיכול להיות רצוי ליישומים קריטיים בביצועים.

מאחורי הקלעים, trim_matches למעשה עובר דרך התווים של המחרוזת משני הקצוות, בודק מול התבנית המסופקת עד שנמצא תו שאינו תואם. זה יעיל למה שהוא עושה, אבל תמיד שים לב שהוא עובד עם ערכי סקלר של יוניקוד. אם המחרוזת שלך עשויה לכלול תווים יוניקוד מרובי-בתים, אין צורך לדאוג שיפריד אותם.

ראה גם