簡體   English   中英

如何查找僅包含大寫字母的單詞(字符串)?

[英]How to find words(strings) with only Uppercase letters?

我想知道,有什么功能或方法,如何從隨機文本中選擇僅包含大寫字母的所有單詞(字符串)? 更具體地說,我想從文本中提取所有大寫單詞並將它們放入字符串數組,因為這些大寫單詞對我很重要。

例如,來自文本: "This text was just made RANDOMLY to show what I MEANT."

在字符串數組中,我將有單詞RANDOMLYMEANT

並且數組應該看起來像這樣String[] myArray = {"RANDOMLY", "MEANT"};

我唯一想到的是,我已經遍歷每一個字母並檢查它的大寫字母,

如是

  • 將字母保存到字符串變量
  • 幫助整數變量( int count )的值增加一
  • 看看下一封信,
    • 如果再次大寫,請重復此部分
    • 如果不是,請轉到另一封信。

我認為我的抽提不是很有效,所以可以告訴我您對此的看法嗎? 還是可能如何使其更有效?

PS:有int count可以排除3個字母以下的短單詞。

可能最簡單的方法是使用\\b[AZ]{4,}\\b這樣的正則表達式來表示

因此您的代碼可能如下所示:

String s = "This text was just made RANDOMLY to show what I MEANT.";

Pattern p = Pattern.compile("\\b[A-Z]{4,}\\b");
Matcher m = p.matcher(s);
while (m.find()) {
    String word = m.group();
    System.out.println(word);
}

除了打印單詞以進行控制台之外,您還可以將其存儲在List<String>

用空格分隔句子。 然后,您可以使用StringUtils.isAllUpperCase(CharSequence cs)例如檢查每個字符串。

http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#isAllUpperCase(java.lang.CharSequence)

使用正則表達式提取它們。 喜歡

public static void main(String[] args) {
        List<String> words = new ArrayList<>();
        String dataStr = "This text was just made RANDOMLY to show what I MEANT.";
        Pattern pattern = Pattern.compile("[A-Z][A-Z]+");
        Matcher matcher = pattern.matcher(dataStr);
        while (matcher.find()) {
            words.add(matcher.group());
        }

        System.out.println(words);
    }

輸出:

[RANDOMLY, MEANT]

將來,您可以調整搜索模式以提取所需的內容。

這是一個最少使用正則表達式的解決方案。

String s = "This text was just made RANDOMLY to show what I MEANT.";
    String[] words = s.split(" |\\.");
    ArrayList<String> result = new ArrayList<>();

    for(String word : words) {
        String wordToUpperCase = word.toUpperCase();
        if(wordToUpperCase.equals(word)) {
            result.add(word);
        }
    }

代碼行:

String[] words = s.split(" |\\.");

表示該字符串將由空格(“”)或由點(“。”)分隔。

為什么在此處需要使用破折號(轉義)的更多信息: Java字符串以“。”分隔。 (點)

如果您只用空格將字符串分開,例如:

String[] words = s.split(" ");

可能會留下令人討厭的結果,例如“ MEANT”。

無論哪種情況,結果中都包含單詞“ I”。 如果您不想這樣做,請進行檢查,以使每個單詞的長度都大於1。

暫無
暫無

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

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