• Scanner遇上UnmappableCharacterException


    上周末的时候。朋友约好去KTV,鉴于我这样的不怎么听歌的孩子伤不起啊,灵机一动就把我的酷狗歌单导出来了,XML文件嘛,内容太多,我仅仅想要歌名足已。

    于是写了一个java去输出歌名。

        岂料我受到了挫伤,scanner.hasNextLine()一直为false,于是我百思不得姐啊,经过调试发现,Scanner内部有java.nio.charset.UnmappableCharacterException,就百度了一下,没找到答案。google訪问不了。想起公司的网络是香港的,就远程上去,还好在stackoverflow上找到了答案。O(∩_∩)O~~
      原来用修改以下一行就OK啦,不解释,你懂的。不懂就去stackoverflow。
        Scanner scanner=new Scanner(new File(filePath),"UTF-8");
    URL:http://stackoverflow.com/questions/19252321/findwithinhorizon-fails-to-match (这个页面上你能够学到很多其它) 

    Java Code:        
    1. public void output(String filePath) throws FileNotFoundException{
    2. Scanner scanner=new Scanner(new File(filePath));
    3. String str=null;
    4. while(scanner.hasNextLine()){
    5. str=scanner.nextLine();
    6. if(str.indexOf("FileName")>0){
    7. System.out.println(str.substring(str.indexOf(">")+1, str.lastIndexOf("<")));
    8. }
    9. }
    10. scanner.close();
    11. }
    File content:
    1. <File>
    2. <MediaFileType>0</MediaFileType>
    3. <FileName>周杰伦 - 爱在西元前.mp3</FileName>
    4. <FilePath>D:music</FilePath>
    5. <FileSize>5623610</FileSize>
    6. <Duration>234292</Duration>
    7. <Hash>0589341ba15528a4c63e36c49a3c0e45</Hash>
    8. <Lyric>E:KuGouLyric周杰伦 - 爱在西元前-0589341ba15528a4c63e36c49a3c0e45.krc</Lyric>
    9. <Bitrate>192004</Bitrate>
    10. <MandatoryBitrate>0</MandatoryBitrate>
    11. </File>
    Java Code after modify:
    1. public void output(String filePath) throws FileNotFoundException{
    2. Scanner scanner=new Scanner(new File(filePath),"UTF-8");//Always explicitly pass a charset when working with text
    3. String str=null;
    4. while(scanner.hasNextLine()){
    5. str=scanner.nextLine();
    6. if(str.indexOf("FileName")>0)
    7. System.out.println(str.substring(str.indexOf(">")+1, str.lastIndexOf("<")));
    8. }
    9. //It's better to check IOException when working with Scanner(PS:find UnmappableCharacterException took me more time,finally by debug to found )
    10. IOException ioException = scanner.ioException();
    11. if (ioException != null) {
    12. ioException.printStackTrace();
    13. }
    14. scanner.close();
    15. }
  • 相关阅读:
    BZOJ2555 SubString(后缀自动机+LCT)
    Luogu4770 NOI2018你的名字(后缀自动机+线段树合并)
    Luogu5284 十二省联考2019字符串问题(后缀树+拓扑排序)
    Codeforces Round #557 Div. 1 based on Forethought Future Cup
    【JS】window.print打印指定内容
    【PHP】Thinkphp 七牛云API对接
    【JS】JS实现时间戳转换成普通时间
    【CSS】非常简单的css实现div悬浮页面底部
    【PHP】php中json_decode()和json_encode()
    【Linux】安装mysql之设置远程访问权限
  • 原文地址:https://www.cnblogs.com/yxysuanfa/p/6830986.html
Copyright © 2020-2023  润新知