3
文字列内の行を繰り返し処理する必要がありますが、最後に改行が残されます。改行文字を含む文字列の行を繰り返します。
ありstr.lines()
ですが、それが返す文字列は、改行文字が切り落とさ持っている:
assert_eq!(lines("foo\nbar\n"), vec!["foo\n", "bar\n"]);
もっとテストケース:
assert!(lines("").is_empty());
assert_eq!(lines("f"), vec!["f"]);
assert_eq!(lines("foo"), vec!["foo"]);
assert_eq!(lines("foo\n"), vec!["foo\n"]);
assert_eq!(lines("foo\nbar"), vec!["foo\n", "bar"]);
assert_eq!(lines("foo\r\nbar"), vec!["foo\r\n", "bar"]);
assert_eq!(lines("foo\r\nbar\r\n"), vec!["foo\r\n", "bar\r\n"]);
assert_eq!(lines("\nfoo"), vec!["\n", "foo"]);
assert_eq!(lines("\n\n\n"), vec!["\n", "\n", "\n"]);
を
ここlet result: Vec<_> = "foo\nbar\n".lines().collect();
assert_eq!(result, vec!["foo", "bar"]);
は、私は必要なものです私は基本的にループでfind
を呼び出すソリューションを持っていますが、私はよりエレガントなものがあるのか疑問に思う。
この
は Split a string keeping the separatorsに似ていますが、その場合には、文字が別々のアイテムとして返されますが、私は、文字列の一部としてそれらを維持したい:私は現在持っているソリューションは、このようになります["hello\n", "world\n"]; // This
["hello", "\n", "world", "\n"]; // Not this
代わりに 'slice :: split_at'を使用する場合、' start'パラメータは必要ありません。ループの各繰り返しで 'self.input'を更新できます。 –
ありがとう@MatthieuM。、それがそれを簡単になります! – robinst