Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从文件中检索单词的正则表达式_Java_Split - Fatal编程技术网

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

Java 从文件中检索单词的正则表达式,java,split,Java,Split,我有一套特别的目录文件 从目录中的所有文件(文本文件)检索内容后,我有一个 字符串列表 每个字符串元素表示从每个文件检索到的内容。因此,列表中的第一个字符串元素表示第一个文件中的内容 现在我想拆分字符串以获得单词(稍后单词存储到字符串数组中) 1) 单词可以用单个空格/多个空格分隔。 2) 句子以“.”结尾,因此新词可以在“.”之后开始 3) 新词可以在“\n”之后开始 有人能推荐一个适合split()方法的正则表达式吗?您可能不需要regexp,只需从文件中删除每个非字母字符,并使用标记器读取

我有一套特别的目录文件

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

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

现在我想拆分字符串以获得单词(稍后单词存储到字符串数组中) 1) 单词可以用单个空格/多个空格分隔。 2) 句子以“.”结尾,因此新词可以在“.”之后开始 3) 新词可以在“\n”之后开始


有人能推荐一个适合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]");