正则表达式检索文件中的单词

问题描述:

我有一组特定的文件diretory。正则表达式检索文件中的单词

从目录中的所有文件(文本文件)中检索内容后,我有一个 字符串列表。

每个字符串元素表示从每个文件中检索到的内容。因此,列表中的第一个String元素表示来自第一个文件的内容。

现在我想分割字符串来获取单词(后面的单词存储成一个字符串数组) 1)单词可以用单个空格/多个空格分隔。 2)句子以'。'结尾,所以一个新单词可以在'。'之后开始。 3)一个新的单词可以在'\ n'之后开始

那么任何人都可以提出一个适合split()方法的正则表达式吗?

+0

这可能是非常类似的问题:http://stackoverflow.com/questions/2159026/regex-how-to-get-words-from-a-string-c – wlk 2012-04-13 10:58:39

+0

但它在C#中,而不是在Java – 2012-04-13 11:19:06

您可能不需要regexp,只需从文件中删除每个非字母字符,然后使用Tokenizer读取每个单词。

+0

“-'是一个非字母字符。似乎不应该删除它。另外,如果您删除所有非字母字符,则最终会生成一个非常长的单词。 – 2012-04-13 11:13:43

+0

我检索了文件内容作为字符串列表,其中每个元素代表单个文件内容。现在,如果我在split()方法中使用分隔符,那么我应该在分隔符处替换什么? – 2012-04-13 11:15:32

+0

@John B,Wojtek可能是通过检测非字母字符来跟踪单词。 – 2012-04-13 11:17:10

也许StringTokenizer类更适合您的需要。构造函数将字符串转换为标记,并使用分隔符列表(在您的情况下:空格,。和换行符)。

+0

根据'StringTokenizer'javadocs:'StringTokenizer是一个遗留类,为了兼容性原因被保留,虽然它在新代码中的使用不受欢迎。建议任何寻求这种功能的人都使用String或java.util.regex包的拆分方法。' – 2012-04-13 11:17:11

我建议使用令牌为此...简单地通过每个字符,并根据字符是什么决定做什么。下面是伪代码

string word = ""; 

while (EOF){ 

    char = getNextChar() 

    if (char not space or full-stop){ 
     append the char to the word 
    } 
    else { 
     if (the word is empty){ continue /* ignore multi space */ } 
     else { 
      add the word to an array of words 
      reset the word to "" 
     } 
    } 
} 

这样,你有你处理数据的方式完全控制 - 你不必担心疯狂的场景与在正则表达式规则包括。最重要的是,这是最有效的方式(比正则表达式更好),并且只需传递一次数据。

+0

已经有很多工具可以用来完成这个工作。我不会鼓励重新发明轮子。 – 2012-04-13 11:12:40

String[] result = myString.split("[\\.\\s]");