2015-05-04 162 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.

相关问题