None
Programmierung

Rust: Zeilenvorschub nach Eingabe entfernen

by Viktor Garske on April 26, 2019, 11 a.m., with 2 comments
Language icon Language: this article is available in: en

Nach dem Einlesen einer Eingabe vom stdin / Terminal muss man oft mit dem Zeilenvorschub / newline (\n) im eingelesenen String umgehen. Um diesen zu entfernen, kann man unter Rust einfach auf die .pop()-Funktion zurückgreifen, die das letzte Zeichen eines Strings löscht:

use std::io::{Write, stdin, stdout};

fn main() {
    // Intro
    println!("-- INPUT Demo --");
    print!("Please enter something: ");
    stdout().flush().unwrap();

    // Input
    let mut inputvar: String = String::new();                                  
    stdin().read_line(&mut inputvar).expect("Error while data input");         
    inputvar.pop(); // remove trailing newline

    // Output
    println!("Eingabe: {}", inputvar);
}

Mittlerweile habe ich sogar eine bessere plattformunabhängigere Lösung gefunden, die mit den unterschiedlichen Typen von Zeilenvorschüben wie \r (Mac pre Version 10) und \r\n (Windows) umgehen kann:

fn trim_newline(s: &mut String) {
    if s.ends_with('\n') || s.ends_with('\r') {
        s.pop();
        if s.ends_with('\r') {
            s.pop();
        }
    }
}
Tags:
Author image
Viktor Garske

Viktor Garske ist der Hauptautor des Blogs und schreibt gerne über Technologie, Panorama sowie Tipps & Tricks.

Comments (2)

Comments are not enabled for this entry.

Tolle Lösung, evtl. willst du sie noch toller machen :)
Es gibt bei Rust ein struct namens Cow, welches hierfür Ideal ist. Unter https://hermanradtke.com/2015/05/29/creating-a-rust-function-that-returns-string-or-str.html findetst du dazu eine gute Erklärung.

Viele Grüße

Avatar Viktor Garske moderator

April 26, 2019, 2:08 p.m.

Moin, vielen Dank für deinen Hinweis! Mit den Cow types habe ich wieder was dazugelernt. :) Allerdings wird in diesem Beispiel (soweit ich das bisher gesehen habe) kein Cow type benötigt, da kein Speicher allokiert wird und lediglich mit einem mutable ausgeborgten Objekt gearbeitet wird.

Viele Grüße
Viktor