首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >当我运行这段代码时,当我使用包含文本的文本文件(如下所示)时,为什么它会给我一个java.util.InputMismatchException?

当我运行这段代码时,当我使用包含文本的文本文件(如下所示)时,为什么它会给我一个java.util.InputMismatchException?
EN

Stack Overflow用户
提问于 2020-02-20 18:46:27
回答 4查看 187关注 0票数 1
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import java.util.*;

public void readToolData(String fileName) throws FileNotFoundException
{
    File dataFile = new File(fileName);
    Scanner scanner = new Scanner(dataFile);
    scanner.useDelimiter(",");

    while( scanner.hasNext() )
    {
        String toolName = scanner.next();
        String itemCode = scanner.next();
        int timesBorrowed = scanner.nextInt();
        boolean onLoan = scanner.nextBoolean();
        int cost = scanner.nextInt();
        int weight = scanner.nextInt();
        storeTool(new Tool(toolName, itemCode, timesBorrowed, onLoan, cost, weight));
    }

    scanner.close();
}

文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Makita BHP452RFWX,RD2001, 12 ,false,14995,1800
Flex Impact Screwdriver FIS439,RD2834,14,true,13499,1200
DeWalt D23650-GB Circular Saw, RD6582,54,true,14997,5400
Milwaukee DD2-160XE Diamond Core Drill,RD4734,50,false,38894,9000
Bosch GSR10.8-Li Drill Driver,RD3021,25, true,9995,820
Bosch GSB19-2REA Percussion Drill,RD8654,85,false,19999,4567
Flex Impact Screwdriver FIS439, RD2835,14,false,13499,1200
DeWalt DW936 Circular Saw,RD4352,18,false,19999,3300
Sparky FK652 Wall Chaser,RD7625,15,false,29994,8400
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-02-20 18:59:00

您应该更改分隔符,使其包含逗号周围的可选空格以及换行符。如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
scanner.useDelimiter("(\\s*,\\s*)|(\r\n)|(\n)");
票数 0
EN

Stack Overflow用户

发布于 2020-02-20 19:05:51

您将获得输入文件第一行的int timesBorrowed = scanner.nextInt()格式的InputMismatchException。该错误是由逗号周围的空格引起的。

将分隔符更改为*, *,然后逗号周围的任意数量的空格将成为分隔符的一部分,从而被删除。除了空格,您还可以使用\\s,它覆盖了所有空格(空格和制表符)。

然后,您将在输入文件的第一行的int weight = scanner.nextInt()行中再次获得异常,因为1800后面跟着一个换行符。因此,您需要一个也与换行符匹配的分隔符:( *, *)|[\r\n]+

正则表达式的意思是:由任意数量的空格组成的逗号或至少一个连续的换行符。请注意,Unix文件通常只有\n,而Windows文件的每个换行符通常都有两个字符\r\n。因此该表达式涵盖了这两种文件格式,还跳过了空行。

下面是一个完整的例子,它是有效的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Main
{

    public static void readToolData(String fileName) throws FileNotFoundException
    {
        File dataFile = new File(fileName);
        Scanner scanner = new Scanner(dataFile);
        scanner.useDelimiter("( *, *)|[\r\n]+");
        while (scanner.hasNext())
        {
            String toolName = scanner.next();
            String itemCode = scanner.next();
            int timesBorrowed = scanner.nextInt();
            boolean onLoan = scanner.nextBoolean();
            int cost = scanner.nextInt();
            int weight = scanner.nextInt();
            System.out.println("toolName=" + toolName + ", weight=" + weight);
        }
        scanner.close();
    }

    public static void main(String[] args) throws FileNotFoundException
    {
        readToolData("/home/stefan/Programmierung/PC-Java/test/src/test.txt");
    }
}
票数 0
EN

Stack Overflow用户

发布于 2020-02-20 18:53:35

这里的问题是,您的行不是以逗号结尾,而是有换行符。

这是您的程序对输入的前两行的解释:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Makita BHP452RFWX,RD2001, 12 ,false,14995,1800\nFlex Impact Screwdriver FIS439,RD2834,14,true,13499,1200

注意到1800之后没有逗号了吗?有一个表示换行符的\n

编辑:我也注意到一些逗号后面的空格,所以这可能也会把事情搞乱。尝试Eng.Fuad的答案,因为它解决了我关心的问题。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60326657

复制
相关文章
当我们在谈免费游戏时
技术改变思想 本来不想用“当我们在谈XXX的时候,我们在谈什么”这种俗气的标题,但这个文章的内容,确实在一些人的想法里,还是有那么一点俗气的。所以用这个标题,也算文题对应吧。免费游戏,道具收费(Free To Play)作为一种游戏类型的存在,似乎是一个最近10年才开始的事情,但在中国,这种类型几乎成为了唯一的游戏类型。一切产品,都是因为有用户的市场需求才会存在,但是免费游戏这个市场,又是如何被挖掘出来的呢?——这对于看清楚免费游戏背后的用户需求,应该是有很多好处的。 2006年的某天,我的老板给我打了个
韩伟
2018/03/05
2.3K1
当我们在谈免费游戏时
当我们谈注册中心时谈什么?
注册中心对于服务提供者需要具备服务注册、注销的能力,对于服务消费者需要提供查询服务、感知服务变化的功能。当然还需要解决一些其他问题才能成为一个优秀的注册中心,如高可用、高性能、水平扩展能力、服务探活能力、路由功能、多机房(多活)能力等。
龟仙老人
2020/12/16
6020
当我们谈部署时,我们在谈什么?
计算机网络把各地的计算机连接了起来,只要有一台可以上网的终端,比如手机、电脑,就可以访问互联网上任何一台服务器的资源(包括静态资源和动态的服务)。
神说要有光zxg
2022/04/12
6180
当我们谈部署时,我们在谈什么?
当我们谈论内容时,我们在谈什么?
作为数字音乐界『双App』之一的虾米音乐迎来了一个爆款内容:《我的少女时代》主题曲《小幸运》在虾米音乐播放量超过三千万,这首由田馥甄演唱的歌,在数字音乐平台的表现很是亮眼,虾米音乐则凭这一爆款内容在用户获取等方面收获满满。过去一个平台可以成就一个明星、一首歌曲,现在反过来,一首单曲竟然具有如此大的魔力,给平台带来助力。这一现象本质是,移动互联网进入内容时代,而《小幸运》的成功给内容产业还是带来了些许启发的。 内容究竟是什么鬼? 2015年可谓中国内容创业的大年,音乐、视频、广播、文学、动漫诸多数字内容领域都
罗超频道
2018/04/28
9320
当我谈论URL编码时我在谈论什么
今天收到一个 Bug, 一个超级奇怪的人名叫做 Isxxxxa Onxxxna Anton
szhshp
2022/08/15
2830
当我做 hackathon 时我在做什么 (1)
从上周四开始的周末(1/7-1/10),是 Tubi 一年一度的 OSS-a-thon。所谓 OSS-a-thon,是我们为了回馈开源社区举办的 hackathon,参与者需要做和开源项目有关的项目 — 可以是对已有的开源项目进行改进,提交 PR,或者做新的项目,但需要开源。
tyrchen
2021/01/29
1.1K0
当我做 hackathon 时我在做什么 (1)
当我做 hackathon 时我在做什么 (3)
治大国若烹小鲜。做 hackathon 也是如此:需要有合适的方法(能),合适的工具(贤),然后朝着目标方向不疾不徐,缓步前进(有所为有所不为)。
tyrchen
2021/01/29
6950
当我做 hackathon 时我在做什么 (3)
当我们创建HashMap时,底层到底做了什么?
在我们new HashMap()时,底层创建了默认长度为16的一维数组Entry[ ] table。当我们调用map.put(key1,value1)方法向HashMap里添加数据的时候:
Java_老男孩
2020/07/15
4570
当我们创建HashMap时,底层到底做了什么?
当我做 hackathon 时我在做什么 (2)
前文中提到,我做的第二个项目是个可视化的项目,名字叫 deneb。deneb 是天鹅座的一等星,也是夏季大三角和北十字两个星群的端点之一。deneb 是对 vega-lite 的封装,受 同样封装了 vega-ltie,深得我喜爱的 Python 的库 altair 的启发。嗯,deneb - vega - altair,聪明的你一定想到了我为什么起这样一个名字:
tyrchen
2021/01/29
2K0
当我做 hackathon 时我在做什么 (2)
当我们在谈SWIFT时,到底在谈什么?
当地时间2月26日,美国、英国、欧盟与加拿大发表共同声明,宣布将俄罗斯主要银行从SWIFT体系中剔除。SWIFT凭借着其强大的制裁效果,在民间一直有着金融核武器之称,因此这一劲爆消息引发了全网的热议,不少人认为此举将对于俄罗斯经济产生巨大影响;也有人认为,我国也要对此未雨绸缪,加强跨境人民币系统CIPS系统的建设;而最乐观的看法是SWIFT是一把伤敌一千自损八百的双刃剑,美国一旦把SWIFT的牌打出来,那么也就意味着美元的金融霸权即将走向终结。
beyondma
2022/03/11
8100
当我们谈论秒杀时我们要做什么?
“秒杀”系统的建设需要整个系统从前到后全栈的协同配合,其中包含了基础技术部维护的多个服务,比如CDN、高防IP、容器平台、缓存、数据库、中间件、全链路压测、监控系统等,我们围绕这些基础服务讨论秒杀系统的技术挑战与架构优化。
春哥大魔王
2020/06/28
6.8K0
go: 当我们在使用sync.Map时,发生了什么
sync.Map是我比较喜欢的一个库,用了非常久,今天突发奇想瞧瞧它的实现。又一次被宇宙中第二NB的语言--go 折服了。 这里准备写一篇文章,讨论下当使用sync.Map执行操作的时候,会发生什么。
超级大猪
2020/07/06
9680
当我开始使用React 时,我希望我知道这些知识
自2013年5月29日首次发布以来,React.js已经占领了互联网。我和许多其他开发人员将他们的成功归功于这个了不起的框架,这已经不是什么秘密了。
前端小智@大迁世界
2019/06/15
9370
当我学python时遇见的问题汇总(持续更新)
PS:一开始我在cmd里面安装过pygame的,但是我用IDLE运行时还是出错,于是只能自己去网上下载来安装
天天Lotay
2022/12/01
5510
当我学python时遇见的问题汇总(持续更新)
当我们谈论监控时,我们在谈论什么?
我们想像中的监控? 我们想像中监控无所不能,是个超人。需要什么数据,它就能给我们什么数据;需要找到故障根源,它就能及时告知我们故障根源。 现实中的监控 可事实上并非如此,我们对监控寄予了太多,想到的
Rainbond开源
2018/05/31
6280
当我们讨论抑郁时,我们误解了什么?
“她那么爱笑,怎么可能抑郁呢?” “矫情”、“软弱”、“想太多”… 关于抑郁,也许你也有过这样的误解 ▼ 向左滑动查看真相 向左滑动查看真相 向左滑动查看真相 向左滑动查看真相 向左滑动查看真相 向左滑动查看真相 向左滑动查看真相 向左滑动查看真相 抑郁并不是“矫情”,除了正确的治疗,患者也需要也有身边人的陪伴、理解和包容。 面对心理健康问题,多一点认识,就能少一些误解。 每年的10月10日是世界精神卫生日,今年,腾讯微光行动联合知乎“吾辈问
腾讯举报中心
2021/10/11
4670
当我们谈论DDD时我们在谈论什么
谈论到 DDD,我们会聊事件风暴,会聊限界上下文,会聊六边形架构,会聊实体值对象。这些概念各不相同,相关的概念也很不一样,但都属于DDD的范畴。见过了很多DDD的讨论和工作坊,我发现大家唇枪舌剑无法达成一致,往往是因为各自脑中的问题并不相同。
ThoughtWorks
2023/04/28
2540
当我们谈论DDD时我们在谈论什么
当我们在谈论内存时,我们在谈论什么
内存,是程序员绕不过的一道坎。写过 C 和 C++ 的人想必都会对内存的手动分配和释放难以忘怀,在 Java 中,得益于 JVM 的自动垃圾回收( GC )机制,大部分情况下编程并不需要关心内存的分配与回收。当然,有了 GC 并不意味着就完事大吉了,如果不了解其中的原理,以错误的姿势滥用 GC ,很有可能翻车酿成不可估量的损失。
用户5397975
2020/02/25
5420
当我们在谈论内存时,我们在谈论什么
当我们在聊Serverless时你应该知道这些
作者:竹涧 原文地址:https://yq.aliyun.com/articles/574222
Nealyang
2019/10/24
1.2K0
当我们在聊Serverless时你应该知道这些
当我们在谈零信任时,我们谈的是什么?
ZERO TRUST在2010年由Forrester分析师John Kindervag正式提出。
腾讯安全
2021/08/13
5460
当我们在谈零信任时,我们谈的是什么?

相似问题

当我使用这段代码时,它会产生错误。

13

当我运行代码时,它会给我一个缩进错误,为什么?

11

当我运行这段代码时NullPointerException

30

当我在一个小型设备上运行这段代码时,它会溢出。

11

为什么这段代码的输出如下所示?

24
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文