正则表达式检索文件中的单词
我有一组特定的文件diretory。正则表达式检索文件中的单词
从目录中的所有文件(文本文件)中检索内容后,我有一个 字符串列表。
每个字符串元素表示从每个文件中检索到的内容。因此,列表中的第一个String元素表示来自第一个文件的内容。
现在我想分割字符串来获取单词(后面的单词存储成一个字符串数组) 1)单词可以用单个空格/多个空格分隔。 2)句子以'。'结尾,所以一个新单词可以在'。'之后开始。 3)一个新的单词可以在'\ n'之后开始
那么任何人都可以提出一个适合split()方法的正则表达式吗?
您可能不需要regexp,只需从文件中删除每个非字母字符,然后使用Tokenizer读取每个单词。
“-'是一个非字母字符。似乎不应该删除它。另外,如果您删除所有非字母字符,则最终会生成一个非常长的单词。 – 2012-04-13 11:13:43
我检索了文件内容作为字符串列表,其中每个元素代表单个文件内容。现在,如果我在split()方法中使用分隔符,那么我应该在分隔符处替换什么? – 2012-04-13 11:15:32
@John B,Wojtek可能是通过检测非字母字符来跟踪单词。 – 2012-04-13 11:17:10
也许StringTokenizer
类更适合您的需要。构造函数将字符串转换为标记,并使用分隔符列表(在您的情况下:空格,。和换行符)。
根据'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 ""
}
}
}
这样,你有你处理数据的方式完全控制 - 你不必担心疯狂的场景与在正则表达式规则包括。最重要的是,这是最有效的方式(比正则表达式更好),并且只需传递一次数据。
已经有很多工具可以用来完成这个工作。我不会鼓励重新发明轮子。 – 2012-04-13 11:12:40
String[] result = myString.split("[\\.\\s]");
这可能是非常类似的问题:http://stackoverflow.com/questions/2159026/regex-how-to-get-words-from-a-string-c – wlk 2012-04-13 10:58:39
但它在C#中,而不是在Java – 2012-04-13 11:19:06