我正在尝试将所有出现的给定字符串替换为彩色版本:
extern crate colored; // 1.6.1
use colored::Colorize;
fn print_found_line(x: &i32, line: &String, found: &str) {
let mut line_to_print: String = line.clone();
println!("{}", found.red()); // work
line_to_print = line_to_print.replace(found, found.red().as_ref());
println!("[{}] {}", x.to_string().blue(), line_to_print); // the found string replaced is not red
}
fn main() {}
第一个println!
可以正常工作并以红色打印文本,但是第二个println!
不能正常工作并以默认颜色打印文本。
似乎字符串文字会丢失颜色信息。我想找到一个replace
等效项,可以根据需要打印文本。
答案 0 :(得分:1)
ColoredString
实现Deref<Target = str>
,但返回的&str
不包含任何颜色信息。您可以通过打印出取消引用的字符串来查看此内容:
println!("{}", found.red().as_ref() as &str);
看来正确的做法是将彩色文本转换为String
,然后将其用于格式设置。
另外:
&String
是没有用的。String
之前将其克隆是没有用的fn print_found_line(x: &i32, line: &str, found: &str) {
let line_to_print = line.replace(found, &found.red().to_string());
println!("[{}] {}", x.to_string().blue(), line_to_print);
}
另请参阅: