2015-05-04 166 views
1

我想知道,有沒有任何功能或方式,如何從隨機文本中選擇所有字母(字符串)只有大寫字母?更具體地說,我想從文本中取出所有大寫單詞並將其放入一個字符串數組中,因爲這些大寫單詞對我很重要。如何查找只有大寫字母的單詞(字符串)?

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

在字符串數組我將具有字RANDOMLYMEANT

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

我想到的唯一的事情是,我有去trought每一個字母,檢查其大寫,

如果是

  • 保存字母變量
  • 增加幫助整數變量的值(int count)一個
  • 並看看下一個字母,
    • 如果再次大寫,重複此部分
    • 如果不是 - 移動到另一個字母。

我覺得我的solotion不是很有效,所以可以告訴我你的意見呢?或者可能會如何使它更有效?

PS:int count是用於排出3個字母或更少的短字。

+0

我們可以假設你想找到一些最小長度的單詞嗎?比如你認爲我是否是正確的詞?還應該把'美國'算作單詞嗎? – Pshemo

+0

以。結尾的字母。 (點)不應該被考慮。對於少於4個字母的單詞也是如此。 – Candybrk

回答

3

也許最簡單的方法來實現它會被使用正則表達式等\b[A-Z]{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>

1

用空格分割你的句子。然後你可以使用StringUtils.isAllUpperCase(CharSequence cs)來檢查每一個字符串。

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

+2

不要忘記標點符號 – CupawnTae

+0

要擴展爲OP:要分割您的句子,請使用String [] splitString = myString.split(「\\ s +」);'然後您可以迭代splitString中的內容,然後檢查'isAllUpperCase(splitString [i])' – CubeJockey

+0

我在初次導入libs時遇到了問題,但這個工作還不錯!謝謝 – Candybrk

1

使用正則表達式來提取它們。像

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] 

有了這個以後,你可能只是調整搜索模式,提取你什麼都想要。

0

這是一個最小化正則表達式的解決方案。

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 split with "." (dot)

,如果您剛剛通過空格的字符串分割,因爲這樣的:

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

它會留下可能令人討厭的結果,如「MEANT」。

無論哪種情況,結果中都會包含「I」一詞。如果你不想這樣做,那麼檢查一下,以便每個單詞的長度大於1.

相關問題