有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java令牌构造不正确

我正在尝试使用以下代码标记文本文件:

    String fileContent = "";  
    String fileContentTokens[];  
    try{  
        fileContent = new Scanner(new File(fname)).useDelimiter("\\Z").next();   
    } catch(Exception ex)  {  
        System.out.println(ex.getMessage());  
    }  

    fileContent = fileContent.replaceAll("\\s*([,.?!\"'()-:*;])\\s*", " $1 ");
    //System.out.println(fileContent);
    fileContentTokens = fileContent.split(" ");  

问题是代词没有正确地形成,我的意思是有些词仍然附有引号,有些词仍然带有撇号。上面的代码应该在每个标点符号之间留有空格,这样就不会附加到单词本身。例如:“That's cool”应该是“That's cool”。但出于某种原因,它没有这样做。它只是为了一些词而不是全部


共 (2) 个答案

  1. # 1 楼答案

    从Java API:注意,替换字符串中的反斜杠(\)和美元符号($)可能会导致结果不同于将其视为文字替换字符串时的结果;请参见Matcher.replaceAll如果需要,使用Matcher.quoteReplacement(java.lang.String)抑制这些字符的特殊含义

  2. # 2 楼答案

    在字符串中有另一种类型的撇号,但它失败了

    Karachi’s Manghopir area , DawnNews reported on Saturday . The
    

    在这个字符串中有 但是在正则表达式中有'

    这些是不同的。将前撇号也添加到正则表达式中,它将起作用:

    fileContent = fileContent.replaceAll("\\s*([,.?!\"'’()-:*;])\\s*", " $1 ");