簡體   English   中英

將 .txt 文件中的單詞存儲到字符串數組中

[英]Storing words from a .txt file into a String array

我正在查看以前有人提出的這個問題的答案,我發現它們非常有幫助。 但是,我對突出顯示的答案有疑問,但我不確定是否應該在那里問,因為它是一個 6 歲的線程。

我的問題是關於答案中給出的這段代碼:

private static boolean isAWord(String token)
{
    //check if the token is a word
}

如何檢查令牌是否為單詞? 你會.contains("\\s+")字符串並檢查它是否包含它們之間的字符? 但是當你遇到一個段落怎么辦? 我不確定如何 go 關於這個。

編輯:我想我應該詳細說明一下。 通常,您會認為單詞會被“”包圍,但是,例如,如果文件包含連字符(也被空格包圍),您會希望isAWord()方法返回 false。 如何驗證某事實際上是一個單詞而不是標點符號?

由於問題不完全清楚,我做了兩種方法。 第一個方法包括整個字符串,如果它有任何數字/符號,則返回 false。 這應該足以確定標記是否是單詞(如果您不介意該單詞是否存在於字典中)。

public static boolean consistsOfLetters(String string) {
        for(int i=0; i<string.length(); i++) {
            if(string.charAt(i) == '.' && (i+1) == string.length() && string.length() != 1) break; // if last char of string is ., it is still word
            if((string.toLowerCase().charAt(i) < 'a' || string.toLowerCase().charAt(i) > 'z')) return false; 
        }  // toLowerCase is used to avoid having to compare it to A and Z
        return true;
    }
        

第二種方法幫助我們根據“ ”字符划分原始字符串(例如一個潛在詞的句子)。 完成后,我們 go 遍歷那里的每個元素並檢查它是否是一個單詞。 如果不是單詞,則返回 false 並跳過 rest。 如果一切正常,則返回 true。

    public static boolean isThisAWord(String string) {
        String[] array = string.split(" ");
        for(int i = 0; i < array.length; i++) {
            if(consistsOfLetters(array[i]) == false) return false;
        }
        return true;
    }

此外,這可能不適用於英語,因為英語在“不要”之類的詞中有撇號,因此需要進一步修改。

java 中的掃描儀默認使用他的WHITESPACE_PATTERN分割字符串,因此分割像"He's my friend"這樣的字符串會產生像["He's", "my", "friend"]這樣的數組。 如果這足夠了,只需刪除該 if 子句並且不要使用該方法。 如果你想用"He","is"而不是"He's" ,你需要一種不同的方法。

簡而言之:該方法的工作方式類似於驗證檢查 -> 如果給定的令牌不應該出現在結果中,則返回 false,否則返回 true。

return token.matches("[\\pL\\pM]+('(s|nt))?");

matches要求匹配整個字符串。

這需要字母\pL和零長度組合變音符號\pM (重音)。 並且可能是英文撇號,如果您認為doesn'tlet's使用一個術語(例如用於翻譯目的)。 您也可以考慮使用連字符。

有幾個單引號和破折號。

Path path = Paths.get("..../x.txt");
Charset charset = Charset.defaultCharset();
String content = Files.readString(path, charset)
Pattern wordPattern = Pattern.compile("[\\pL\\pM]+");
Matcher m = wordPattern.matcher(content);
while (m.find()) {
    String word = m.group(); ...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM