stringstream 进行类型转换,判断是否转换成功

先上代码

static bool string_to_int(const std::string& str, int& num) {
    int origin_num = num;
    std::stringstream ss;
    ss << str;
    ss >> num;
    if (ss.eof() && !ss.fail()) {
        return true;
    } else {
        num = origin_num;
        return false;
    }
}
  • 注意,要判断是否转换成功,最好用状态位判断,参考primer 8.1.2节。总结来看,bad表示不可恢复错误,fail表示可恢复错误,如期望读数值确读字符等,eof代表是否流结束。当这三个都为0时,good为1
  • 所以判断是否转换成功,不要用good,要用fail,用流作为条件也等价于!fail(),像这种if (ss),等价于if (!ss.fail())
  • 要注意的是,类似"12he"这种字符串,fail为0,因为前两个为数字,但是eof为0,流没有结束。所以如果可以接受这种,读前面的数字就够了,那用fail判断即可,如果这种不可接受,那就加上eof判断
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在使用 Stream API 进行数据处理时,可以使用 `filter()` 方法来过滤掉不符合条件的元素,只保留符合条件的元素。如果我们想要过滤掉元素中为空的值,可以使用 `filter()` 方法结合 `Objects::nonNull` 方法来实现: ```java List<String> list = Arrays.asList("apple", null, "banana", null, "orange"); List<String> result = list.stream() .filter(Objects::nonNull) .collect(Collectors.toList()); System.out.println(result); // [apple, banana, orange] ``` 在上面的代码中,首先创建了一个包含多个元素(包括 `null`)的字符串列表,然后使用 `stream()` 方法将其转换为流,再使用 `filter()` 方法结合 `Objects::nonNull` 方法来过滤掉为空的值,最后使用 `collect()` 方法将过滤后的元素收集到一个新的列表中。 需要注意的是,`Objects::nonNull` 方法是 Java 8 中添加的一个静态方法,用于判断给定的对象是否为空(即为 `null`)。 ### 回答2: stream.map进行判断是否为空的方法是通过stream的map操作,结合Optional类的判断来实现。首先,我们需要使用map操作将stream中的元素映射为Optional类型,然后通过判断Optional是否为空来判断原来的元素是否为空。 具体步骤如下: 1. 使用map操作将stream中的元素转化为Optional类型。可以通过stream的map方法配合Optional的ofNullable方法,将每个元素转为Optional类型。如果原先的元素为空,则对应的Optional值也为空;如果原先的元素非空,则对应的Optional值为该元素的值。 2. 判断Optional是否为空。对于每个经过map操作后的Optional值,我们可以调用Optional类的isPresent方法来判断是否为空。isPresent方法返回一个boolean值,如果Optional值非空,则返回true;如果Optional值为空,则返回false。根据isPresent方法的返回值,我们可以进一步判断stream中原来的元素是否为空。 综上所述,通过使用stream的map操作和Optional类的判断方法,我们可以判断stream中的元素是否为空。 ### 回答3: 在Stream的操作中,可以使用`map`方法来对每个元素进行处理和转换。但是`map`方法本身不能用来判断元素是否为空,它只能对每个元素进行处理。 如果我们想要判断元素是否为空,可以使用`filter`方法结合`Optional`类来实现。首先,我们可以通过`filter`方法来过滤掉为空的元素,然后再使用`map`方法对非空元素进行处理。 具体而言,可以通过以下步骤实现对Stream元素是否为空的判断: 1. 使用`filter`方法过滤掉空元素。可以使用`Objects::nonNull`方法作为过滤器,该方法会检查元素是否为null。 2. 使用`map`方法对非空元素进行处理或转换。 例如,假设我们有一个存储字符串的Stream对象`stream`,我们希望对其中非空的字符串进行处理,可以按照以下方式操作: ```java stream.filter(Objects::nonNull) // 过滤掉空元素 .map(str -> str.toUpperCase()) // 将非空字符串转换为大写 .forEach(System.out::println); // 打印处理后的结果 ``` 在上述示例中,我们首先使用`filter`方法过滤掉为空的元素,然后使用`map`方法将非空字符串转换为大写字母。最后通过`forEach`方法将处理后的结果打印出来。 值得注意的是,`filter`方法和`map`方法都是中间操作,需要使用一个终端操作如`forEach`来触发Stream的处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值