【问题标题】:How to find words(strings) with only Uppercase letters?如何查找只有大写字母的单词(字符串)?
【发布时间】:2015-05-04 19:28:09
【问题描述】:

我想知道,有没有什么功能或方法,如何从随机文本中选择所有只有大写字母的单词(字符串)?更具体地说,我想从文本中取出所有大写单词并将它们放入一个字符串数组中,因为这些大写单词对我来说很重要。

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

在字符串数组中,我将有单词RANDOMLY 和MEANT。

数组应该是这样的String[] myArray = {"RANDOMLY", "MEANT"};

我想到的唯一一件事就是我已经检查了每一个字母并检查它是否大写,

如果是的话

  • 将字母保存到字符串变量中
  • 帮助整数变量(int count)加一
  • 看看下一个字母,
    • 如果再次大写,重复这部分
    • 如果不是 - 移到另一个字母。

我觉得我的solotion不是很有效,能告诉我你的看法吗?或者说如何让它更有效?

PS:int count是用来驱逐3个字母以下的短词的。

【问题讨论】:

  • 我们可以假设您想要查找的单词的最小长度吗?例如,您认为I 是正确的词吗? U.S.A 也应该算作单词吗?
  • 以 . 结尾的字母(点)不应该被考虑。少于 4 个字母的单词也是如此。

标签: java string uppercase


【解决方案1】:

实现它的最简单方法可能是使用正则表达式,例如\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>。

【讨论】:

    【解决方案2】:

    用空格分割你的句子。然后你可以使用StringUtils.isAllUpperCase(CharSequence cs) 来检查每一个字符串。

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

    【讨论】:

    • 别忘了标点符号
    • 扩展OP:拆分句子,使用String[] splitString= myString.split("\\s+");然后你可以遍历splitString中的内容,并检查isAllUpperCase(splitString[i])
    • 一开始我在导入库时遇到了问题,但这个工作也很好!谢谢
    【解决方案3】:

    使用正则表达式提取它们。喜欢

    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]
    

    有了这个以后,你可以调整搜索模式来提取你想要的。

    【讨论】:

      【解决方案4】:

      这是一个最少使用正则表达式的解决方案。

      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。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-09
        • 2014-11-28
        • 1970-01-01
        • 2016-02-15
        • 1970-01-01
        • 2014-05-19
        • 2010-12-05
        相关资源
        最近更新 更多