将字符串解析为整数

安德烈

因此,我试图在字符串中查找模式并将其转换为整数。

首先,我寻找一个字符串:

let haystack = "HTTP/1.1 200\r\n";
let needle = "HTTP/1.";

let http_location = haystack.rfind(needle);
if (http_location.is_some()) {

现在,我已经找到了获取数字状态的两种方法。任何一个:

    let mut temp_str = haystack.char_at(http_location.unwrap());
    let status = String::from_str(temp_str);
}

或者:

    let status = String::from_str(&haystack[http_location.unwrap()]);
}

不幸的是,它们都已被弃用(无论如何可能都是错误的)。目前正确的做法是什么?

另外,这部分在样式上是否正确?:

let http_location = haystack.rfind(needle);
if (http_location.is_some())
Shepmaster

解析是一个广泛而多样的主题。有简单的解析工具,也有高性能的解析工具以及两者之间的频谱。

fn main() {
    let haystack = "HTTP/1.1 200\r\n";
    let needle = "HTTP/1.";

    let z: Option<u8> = haystack.rfind(needle).and_then(|pt| {
        let after_match = &haystack[(pt + needle.len())..];
        after_match.splitn(2, " ").next()
    }).and_then(|val| {
        val.parse().ok()
    });

    println!("{:?}", z)
}

在这里,我们rfind像以前一样使用,这可能会失败。and_then如果结果为,我们将运行闭包Some第一个闭合件将针的线切成薄片,然后将其在空间上分开,最多分为2个部分。那样可能会失败,因此我们要使用第二个代码and_then来使用parse,而第二个代码也会失败Result,因此我们将其转换为,Option以保留类型。

到此为止,我们仍然可能失败了,因为我们解析的东西可能不是一个可解析的数字!

Rust确实可以帮助您确定可能失败的明确地方,因此您必须对付这些地方。^ _ ^

在这种情况下:

  1. 字符串可能没有“ HTTP / 1”。在里面
  2. 迭代器必须在某个时刻结束,以便它们可以返回None
  3. 将字符串解析为数字可能会失败。

这是使用regex板条箱的替代解决方案

extern crate regex;

use regex::Regex;

fn main() {
    let haystack = "HTTP/1.1 200\r\n";

    let re = Regex::new(r"HTTP/1.(\d) (\d+)\r\n").unwrap();
    let captures = re.captures(haystack).unwrap();
    let version: Option<u8> = captures.at(1).and_then(|version| version.parse().ok());
    let status: Option<u8> = captures.at(2).and_then(|version| version.parse().ok());

    assert_eq!(Some(1), version);
    assert_eq!(Some(200), status);

    println!("Version: {:?}, Status: {:?}", version, status);
}

您会看到我们具有相同的故障模式类型,但是结构略有不同。

或使用Result的版本try!

#[derive(Debug,Copy,Clone,PartialEq)]
enum Error {
    StartNotFound,
    NotANumber,
}

fn parse_it(haystack: &str) -> Result<u8, Error> {
    let needle = "HTTP/1.";
    let pt = try!(haystack.rfind(needle).ok_or(Error::StartNotFound));
    let after_match = &haystack[(pt + needle.len())..];
    let val = after_match.splitn(2, " ").next().unwrap();
    val.parse().map_err(|_| Error::NotANumber)
}

fn main() {
    println!("{:?}", parse_it("HTTP/1.1 200\r\n"));
    println!("{:?}", parse_it("HTTP/1"));
    println!("{:?}", parse_it("HTTP/1.cow"));
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将字符串解析为整数

来自分类Dev

无法将字符串解析为整数值

来自分类Dev

Javascript将字符串解析为整数

来自分类Dev

C ++将子字符串解析为整数

来自分类Dev

Rust:无法将整数解析为字符串,ParseIntError

来自分类Dev

无法将字符串解析为整数值

来自分类Dev

将空格分隔的整数字符串解析为经过过滤的整数数组

来自分类Dev

将字符串解析为对象

来自分类Dev

将字符串解析为LPCWSTR

来自分类Dev

将字符串解析为JSON

来自分类Dev

将字符串解析为哈希

来自分类Dev

将字符串解析为字典

来自分类Dev

将字符串解析为Ast

来自分类Dev

将字符串解析为JSON

来自分类Dev

将字符串解析为数组

来自分类Dev

将字符串解析为对象

来自分类Dev

将字符串解析为JSON

来自分类Dev

将字符串解析为JSON

来自分类Dev

将字符串解析为DateTime

来自分类Dev

将字符串解析为localdatetime

来自分类Dev

将字符串解析为变量

来自分类Dev

将命令行参数解析为字符串以在Fortran中存储整数

来自分类Dev

Pandas Dataframe:如何将整数解析为0和1的字符串?

来自分类Dev

C:将十六进制字符串解析为无符号长整数

来自分类Dev

将字符串解析为带范围的整数列表

来自分类Dev

如何将包含负数的字符串解析为整数?

来自分类Dev

如何将具有运算符的字符串解析为整数?

来自分类Dev

大学计算机科学:将整数值从字符串中解析为列表

来自分类Dev

如何将字符串解析为变量/函数/浮点数/整数赋值/值?