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();
}
}
}