Java 从文件中检索单词的正则表达式
我有一套特别的目录文件 从目录中的所有文件(文本文件)检索内容后,我有一个 字符串列表 每个字符串元素表示从每个文件检索到的内容。因此,列表中的第一个字符串元素表示第一个文件中的内容 现在我想拆分字符串以获得单词(稍后单词存储到字符串数组中) 1) 单词可以用单个空格/多个空格分隔。 2) 句子以“.”结尾,因此新词可以在“.”之后开始 3) 新词可以在“\n”之后开始Java 从文件中检索单词的正则表达式,java,split,Java,Split,我有一套特别的目录文件 从目录中的所有文件(文本文件)检索内容后,我有一个 字符串列表 每个字符串元素表示从每个文件检索到的内容。因此,列表中的第一个字符串元素表示第一个文件中的内容 现在我想拆分字符串以获得单词(稍后单词存储到字符串数组中) 1) 单词可以用单个空格/多个空格分隔。 2) 句子以“.”结尾,因此新词可以在“.”之后开始 3) 新词可以在“\n”之后开始 有人能推荐一个适合split()方法的正则表达式吗?您可能不需要regexp,只需从文件中删除每个非字母字符,并使用标记器读取
有人能推荐一个适合split()方法的正则表达式吗?您可能不需要regexp,只需从文件中删除每个非字母字符,并使用标记器读取每个单词。您可能不需要regexp,只需从文件中删除每个非字母字符,并使用标记器阅读每个单词。也许该类更适合您的需要。构造函数获取要标记的字符串和分隔符列表(在您的示例中为空格、、和换行符)。也许该类更适合您的需要。构造函数获取要标记化的字符串和分隔符列表(在您的示例中为:空格、、和换行符)。我建议为此使用标记。。。只需浏览每个角色,并根据角色是什么来决定要做什么。这是伪代码
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 ""
}
}
}
这样,您就可以完全控制处理数据的方式—您不必担心要包含在正则表达式规则中的疯狂场景。最重要的是,这是最有效的方法(def优于regex),您只需对数据进行一次传递。我建议使用令牌进行此操作。。。只需浏览每个角色,并根据角色是什么来决定要做什么。这是伪代码
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 ""
}
}
}
String[] result = myString.split("[\\.\\s]");
这样,您就可以完全控制处理数据的方式—您不必担心要包含在正则表达式规则中的疯狂场景。最重要的是,这是最有效的方法(def优于regex),您只需对数据进行一次传递。这可能是一个非常相似的问题:这可能是一个非常相似的问题:有很多工具已经编写好了。我不鼓励重新发明轮子。已经有很多工具可以实现这一点。我不鼓励重新发明轮子。
-
是非字母字符。似乎不应该移除它。此外,如果删除所有非字母字符,最终只会得到一个非常长的单词。我检索的文件内容是字符串列表,其中每个元素表示单个文件内容。现在,如果我在split()方法中使用delimiter,我应该用什么来代替delimiter?@John B,Wojtek可能告诉我通过检测非字母字符来跟踪单词。显然,你不必删除空格,但这是我解决这个问题的一般思路。-
是非字母字符。似乎不应该移除它。此外,如果删除所有非字母字符,最终只会得到一个非常长的单词。我检索的文件内容是字符串列表,其中每个元素表示单个文件内容。现在,如果我在split()方法中使用delimiter,我应该用什么来代替delimiter?@John B,Wojtek可能告诉我通过检测非字母字符来跟踪单词。显然,你不必删除空格,但这是我解决这个问题的总体思路。根据StringTokenizer
javadocs:StringTokenizer是一个遗留类,出于兼容性原因保留了它,尽管新代码中不鼓励使用它。建议寻求此功能的任何人使用String的拆分方法或java.util.regex包。
根据StringTokenizer
javadocs:StringTokenizer是一个遗留类,出于兼容性原因保留,尽管在新代码中不鼓励使用它。建议任何寻求此功能的人改用String的split方法或java.util.regex包。
String[] result = myString.split("[\\.\\s]");