6 个版本
使用旧的 Rust 2015
0.2.0 | 2018年2月4日 |
---|---|
0.1.4 | 2018年2月2日 |
#2657 在 解析器实现
34 每月下载量
在 vampire_api 中使用
3.5MB
324 行
包含 (WOFF 字体, 120KB) docs/Heuristica-Italic.woff, (WOFF 字体, 90KB) docs/FiraSans-Medium.woff, (WOFF 字体, 92KB) docs/FiraSans-Regular.woff, (WOFF 字体, 56KB) docs/SourceCodePro-Regular.woff, (WOFF 字体, 56KB) docs/SourceCodePro-Semibold.woff, (WOFF 字体, 49KB) docs/SourceSerifPro-Bold.woff 和更多.
Scanner
Java 的 java.util.Scanner
接口的 Rust 版本
安装/入门
该项目可在 crates.io 上找到。
对于最新版本,请始终检查此存储库。
开发
代码应根据 rustfmt
进行格式化。当前路线图中没有需要使用 unsafe
块的行为。
所有 unwrap()
应该立即跟在一个检查它们是否安全的检查之后,或者包含一个解释为什么它们可以保证是安全的注释。
我们遵循测试驱动开发。将 java.util.Scanner
的行为作为测试的参考实现,除了在应该使用包装返回值(例如,Option
,Result
)的情况下不应抛出异常。这将使我们与 Java 的某些地方不一致。
最后,祝大家玩得开心。没有必要对Java的1:1兼容性过于严格,但这确实提供了一个良好的模式,用于处理复杂的IO,而不需要像C和C++那样使用变长函数或运算符重载。我们试图保持兼容性,以便熟悉Java Scanner语法的开发者能够快速学习,但这也是一个提出对Java Scanner不满的机会,只要你能够合理地证明它。
部署/发布
只需将 file_scanner = "0.2.0"
添加到您的 [dependencies]
中。
注意与之前版本的更改:我们现在接受一个实现 Read
的不可变对象,而不是一个指向实现 BufRead
的对象的可变引用。请参阅下面的示例代码。
extern crate file_scanner;
use file_scanner::Scanner;
//snip
let file = File::open(...)?;
let mut s = Scanner::new(file);
let int = s.next_int().unwrap();
let bin = s.next_int_radix(2).unwrap();
let real = s.next_float().unwrap();
let hex_real = s.next_float_radix(16).unwrap();
let word = s.next().unwrap();
let line = s.next_line().unwrap();
s.set_delim_str("[ foo ]"); // words will now be delimited by "[ foo ]"
// words are delimited by whitespace (this is the default behavior)
s.set_delim(Regex::new(r"\s+").unwrap());
s.set_radix(2); // future calls to next_int or next_float will use binary
s.set_radix(16); // hexadecimal
s.set_radix(36); // alphanumeric
// or anything in between
有关完整文档,请参阅 https://hxtk.github.io/Rust-Scanner/file_scanner/
注意我们目前正在跟踪一个错误,即先验分隔符大于缓冲区时无法检测。有关详细信息,请参阅 问题 #4。
功能
完整
-
扫描仪.next() -> 选项<字符串>
-
扫描仪.next_line() -> 选项<字符串>
-
扫描仪.next_int<T:整数>() -> 选项<T>
-
支持正则语言分隔符*
-
扫描仪.next_float<T:浮点数>() -> 选项<T>
-
任意基数整数解析
路线图
扫描仪.has_next*
贡献
一般来说,您可以自由地开发我们尚未在此处实现的任何在 java.util.Scanner
中找到的功能。仓库所有者保留拒绝拉取请求的权利。以下是一些确保您的拉取请求被接受的建议
-
对您正在编写的功能的问题发表评论。如果没有问题,请创建一个。
-
获得一位主要贡献者的批准。
-
为您的功能包含单元测试。如果与
java.util.Scanner
具有匹配,请确保这些测试与其实际行为相匹配(请参阅“开发”部分下的异常注意事项)。
如果您没有时间实现功能,最好的帮助方式之一就是吹毛求疵(礼貌地)。首席开发者仍然是Rust和软件工程的一般学生。
依赖关系
~3.5MB
~78K SLoC