【问题标题】:why am I inserting multiple spaces into my list为什么我要在列表中插入多个空格
【发布时间】:2012-12-25 20:16:17
【问题描述】:

我正在读取一个 txt 文件,其中包含一个段落,我正在解析单词并将它们插入到一个列表中;但是,我也在插入空格。不知何故,我的正则表达式似乎每次遇到逗号或点时都不起作用,因为它添加了一个空格......如果有人可以建议一个可以解决这个问题的正则表达式?谢谢

public class Exercise225 {

    public static void main(String... args) throws FileNotFoundException {
        String file = "words.txt";
        Scanner inFile = new Scanner(new File(file));
        String[] words = null;

        String line = "";
        List list = new ArrayList();

        while (inFile.hasNextLine()) {
            line = inFile.nextLine();
            words = line.split("[\n|\r|\t| |,|.|)|(|-|\"|!]");

            for (int i = 0; i < words.length; i++) {
                list.add(words[i].toLowerCase());                   
            }
        }
        Collections.sort(list);

        System.out.println(list.size());

        Iterator listItr = list.iterator();

        while (listItr.hasNext()) {
            System.out.println(listItr.next());
        }

        inFile.close();

    }    
}

【问题讨论】:

  • 我认为你必须逃避“。”在你的正则表达式中?
  • 我认为你应该从转义 '.' 开始。和 '-' -- 这些是正则表达式中的特殊字符。
  • 点不需要转义。它在字符类中并不特殊。

标签: java regex list parsing


【解决方案1】:

您可以使用+ 量词在一个或多个 分隔符上进行拆分,而不是仅在一个分隔符上进行拆分。此外,您不需要在字符类中使用管道。

String regex = "[\n\r\t ,.)(\"!-]+";
words = line.split(regex);

【讨论】:

  • 但是以空字符开头的行呢?
【解决方案2】:

使用\\s+ 作为用于拆分的正则表达式中的空间。这将在拆分期间匹配一个或多个空格。

【讨论】:

    【解决方案3】:

    希望下面的这个改变能给你带来预期的结果

           String regEx = "[\n|\r|\t| |,|.|)|(|-|\"|!]";                
           line = inFile.nextLine().replaceAll(regEx+"^", "");          
           if(line.length()<=0)continue;                                
           words = line.split(regEx+"+");                            
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-06
      • 2021-03-02
      • 1970-01-01
      • 2012-08-14
      相关资源
      最近更新 更多