#scanner #stream #text-parser #data-stream #ascii-text #java #read

scanner-rust

简单的文本扫描器,可使用 UTF-8 或 ASCII 解析原始类型和字符串

33 个稳定版本

2.0.17 2023年11月11日
2.0.16 2022年3月14日
2.0.15 2021年4月22日
2.0.14 2021年3月11日
1.0.4 2019年3月30日

#150解析器实现

Download history 98/week @ 2024-04-22 94/week @ 2024-04-29 63/week @ 2024-05-06 78/week @ 2024-05-13 103/week @ 2024-05-20 99/week @ 2024-05-27 86/week @ 2024-06-03 82/week @ 2024-06-10 63/week @ 2024-06-17 70/week @ 2024-06-24 20/week @ 2024-07-01 33/week @ 2024-07-08 70/week @ 2024-07-15 67/week @ 2024-07-22 72/week @ 2024-07-29 112/week @ 2024-08-05

324 每月下载量
用于 12 个crate (11 直接)

MIT 许可证

215KB
3.5K SLoC

扫描器

CI

此crate提供类似Java的扫描器,可以解析使用UTF-8或ASCII的原始类型和字符串。

扫描流

ScannerScannerAscii 可用于从流中读取字符串或原始数据。

use std::io::{self, Write};

use scanner_rust::ScannerAscii;

print!("Please input two integers, a and b: ");
io::stdout().flush().unwrap();

let mut sc = ScannerAscii::new(io::stdin());

let a = {
    loop {
        match sc.next_isize() {
            Ok(i) => break i.unwrap_or(0),
            Err(_) => {
                print!("Re-input a and b: ");
                io::stdout().flush().unwrap();
            }
        }
    }
};

let b = {
    loop {
        match sc.next_isize() {
            Ok(i) => break i.unwrap_or(0),
            Err(_) => {
                print!("Re-input b: ");
                io::stdout().flush().unwrap();
            }
        }
    }
};

println!("{} + {} = {}", a, b, a + b);

此外,drop_nextdrop_next_line 方法在您想要跳过一些数据时非常有用。

默认缓冲区大小为256字节。如果想要更改,可以使用 new2 关联函数或 scan_path2 关联函数并明确定义长度来创建上述结构的实例。

例如,要将缓冲区大小更改为64字节,

use scanner_rust::generic_array::typenum::U64;
use scanner_rust::Scanner;

let mut sc: Scanner<_, U64> = Scanner::scan_path2("Cargo.toml").unwrap();

扫描字符串切片(&str

ScannerStr 可用于从字符串切片中读取字符串。

use std::io::{self, Write};

use scanner_rust::ScannerStr;

let mut sc = ScannerStr::new(" 123   456.7    \t\r\n\n c中文字\n\tHello world!");

assert_eq!(Some(123), sc.next_u8().unwrap());
assert_eq!(Some(456.7), sc.next_f64().unwrap());
assert_eq!(Some(' '), sc.next_char().unwrap());
assert_eq!(Some(' '), sc.next_char().unwrap());
assert_eq!(true, sc.skip_whitespaces().unwrap());
assert_eq!(Some('c'), sc.next_char().unwrap());
assert_eq!(Some("中文字"), sc.next_line().unwrap());
assert_eq!(Some("\tHello world!".into()), sc.next_line().unwrap());
assert_eq!(None, sc.next_line().unwrap());

扫描 u8 切片

ScannerU8SliceScannerU8SliceAscii 可用于从 u8 切片中读取原始数据。

use std::io::{self, Write};

use scanner_rust::ScannerU8Slice;

let mut sc = ScannerU8Slice::new(" 123   456.7    \t\r\n\n c中文字\n\tHello world!".as_bytes());

assert_eq!(Some(123), sc.next_u8().unwrap());
assert_eq!(Some(456.7), sc.next_f64().unwrap());
assert_eq!(Some(' '), sc.next_char().unwrap());
assert_eq!(Some(' '), sc.next_char().unwrap());
assert_eq!(true, sc.skip_whitespaces().unwrap());
assert_eq!(Some('c'), sc.next_char().unwrap());
assert_eq!(Some("中文字".as_bytes()), sc.next_line().unwrap());
assert_eq!(Some("\tHello world!".as_bytes()), sc.next_line().unwrap());
assert_eq!(None, sc.next_line().unwrap());

Crates.io

https://crates.io/crates/scanner-rust

文档

https://docs.rs/scanner-rust

许可证

MIT

依赖项

~0.5–1MB
~24K SLoC