Java 如何查找只有大写字母的单词(字符串)?

Java 如何查找只有大写字母的单词(字符串)?,java,string,uppercase,Java,String,Uppercase,我想知道,有没有什么功能或方法,如何从随机文本中选择只有大写字母的所有单词字符串?更具体地说,我想从文本中提取所有大写单词并将它们放入字符串数组中,因为这些大写单词对我很重要 例如,从文本:这篇文本只是随机制作,以显示我的意思 在字符串数组中,我将随机生成单词并表示其含义 数组应该看起来像这个字符串[]myArray={random,means} 我唯一想到的是我仔细检查了每一个字母的大写字母 如果有的话 将字母保存到字符串变量 将帮助整数变量int count的值增加1 看看下一封信, 如果是

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

例如,从文本:这篇文本只是随机制作,以显示我的意思

在字符串数组中,我将随机生成单词并表示其含义

数组应该看起来像这个字符串[]myArray={random,means}

我唯一想到的是我仔细检查了每一个字母的大写字母

如果有的话

将字母保存到字符串变量 将帮助整数变量int count的值增加1 看看下一封信, 如果是大写字母,重复这一部分 如果没有-移动到另一个字母。 我觉得我的建议不是很有效,你能告诉我你的意见吗?或者如何使其更有效


注:int count用于排除3个字母及以下的短词。

用空格分隔句子。然后,您可以使用StringUtils.isAllUpperCaseCharSequence cs来检查每个字符串


用空格分开你的句子。然后,您可以使用StringUtils.isAllUpperCaseCharSequence cs来检查每个字符串


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

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);
    }

将来有了这个功能,您可以调整搜索模式来提取您想要的内容。

使用正则表达式来提取它们。像

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);
    }

将来有了它,您可以调整搜索模式以提取您想要的内容。

实现它的最简单方法可能是使用类似regex的\b[A-Z]{4,}\b,它表示

\b-字母数字字符和非字母数字字符之间的位置 [A-Z]A-Z {4,}如果我们不希望像I这样的单字母单词被计算在内,它至少会出现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);
}

除了将word打印到控制台之外,您还可以将其存储在列表中。

实现它的最简单方法可能是使用类似regex的\b[A-Z]{4,}\b,它表示

\b-字母数字字符和非字母数字字符之间的位置 [A-Z]A-Z {4,}如果我们不希望像I这样的单字母单词被计算在内,它至少会出现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);
}

除了将word打印到控制台之外,您还可以将其存储在列表中。

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

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(" ");
它可能会留下像我所说的那样糟糕的结果


无论哪种情况,结果中都包含单词I。如果您不想这样做,请进行检查,使每个单词的长度都大于1。

这里有一个最小限度地使用正则表达式的解决方案

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(" ");
它可能会留下像我所说的那样糟糕的结果


无论哪种情况,结果中都包含单词I。如果您不想这样做,请检查每个单词的长度是否大于1。

不要忘记标点符号扩展OP:要拆分句子,请使用String[]splitString=myString.split\\s+;然后您可以迭代splitString中的内容,并检查IsAllUpperCaseSpiltString[i]我一开始在导入libs时遇到问题,但这也很好!感谢您不要忘记标点符号扩展OP:要拆分句子,请使用String[]splitString=myString.split\\s+;然后您可以迭代splitString中的内容,并检查IsAllUpperCaseSpiltString[i]我一开始在导入libs时遇到问题,但这也很好!谢谢我们可以假设你想找到的单词的最小长度吗?例如,你认为我是正确的词吗?美国也应算作以结尾的单词?字母。dot不应该被考虑。对于少于4个字母的单词也是如此。我们可以假设你想找到的单词的最小长度吗?例如,你认为我是正确的词吗?美国也应算作以结尾的单词?字母。dot不应该被考虑。少于4个字母的单词也是如此。