当前位置: 首页 > 知识库问答 >
问题:

计算以大写字母开头的字符串中的所有单词

印季
2023-03-14

我在大学学习Java,我需要写一个静态int countCapitals(String s)方法,返回字符串s中有多少个单词以大写字母开头。

大写字母是UPPERCASE_LETTER类型或TITLECASE_LETTER类型的字符(Character)。单词是由一个或多个空格、字符、符号或标点符号分隔的字母或数字序列。

New.countCapitals("亲爱的朋友们,你们好!这里—以大写字母开头的单词")== 6

我只允许在字符串和字符类中使用方法。(无正则表达式)

public class New {
    static int countCapitals(String s) {
        int c = 0;
        if (Character.isUpperCase(s.charAt(0)) == true
                || Character.isTitleCase(s.charAt(0)) == true) {
            c++;
        }
        for (int i = 0; i < s.length() - 1; i++) {
            if (Character.isLetter(s.charAt(i)) == false
                    && Character.isLetter(s.charAt(i + 1)) == true) {
                if (Character.isUpperCase(s.charAt(i + 1)) == true
                        || Character.isTitleCase(s.charAt(i + 1)) == true) {
                    c++;
                }
            }
        }
        return c;
    }
}

这是我的代码,但它在某些测试中不起作用。测试是关闭的,所以我不知道是哪些测试。你能告诉我哪里出了问题以及如何修复它吗?

共有1个答案

诸新霁
2023-03-14

Java的内置正则表达式包是我要走的路:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class WordsStartingWithCapitalLetter {

    public static void main(String[] args) {
        // Test 1 -- simple sentence
        String s = "The Quick Brown Fox jumps over the lazy Dog";
        System.out.println("\ninput string: " + s);
        System.out.println("capitalized words:" + getCountOfWordsWithInitialCap(s));

        // Test 2 -- punctuation and newlines
        s = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor\n"
        + "incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation\n"
        + "ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit\n"
        + "in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat\n"
        + "non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
        System.out.println("\ninput string: " + s);
        System.out.println("capitalized words:" + getCountOfWordsWithInitialCap(s));

        // Test 3 -- Scottish sirnames and hyphens
        s = "The quick brown MacGavin jumps over the lazy MacGowan-dog";
        System.out.println("\ninput string: " + s);
        System.out.println("capitalized words:" + getCountOfWordsWithInitialCap(s));
    }

    private static final Pattern WORD_WITH_CAP_REGEX = Pattern.compile("([A-Z][-A-Za-z]*)");

    private static int getCountOfWordsWithInitialCap(String s) {
         int count = 0;
         Matcher matcher = WORD_WITH_CAP_REGEX.matcher(s);
         while(matcher.find()) {
            count++;
            String capitalizedWord = matcher.group(1);
            System.out.println("\t"+count+" : "+capitalizedWord);   // remove if you don't want to see the matches
         }
         return count;
    }
}
 类似资料:
  • 问题内容: 如何使用MySQL查询来计算大写字母?我现在正在尝试 但这给我一个错误的说法: 我猜,我不允许在AGAINST子句中使用列表,这很烂 那么,有没有办法实现这一目标? 问题答案: 试试这个功能- 例子:

  • 我有一个字符串列表,每个字符串大约有10个句子。我希望从每个字符串中找到以大写字母开头的所有单词。优选地在句子中的第一个词之后。我正在使用re。我要做这件事。当我手动设置string=''时,我不会遇到任何问题,但是当我尝试使用for循环来循环列表中的每个条目时,我会得到不同的输出。 输出: 当我手动输入字符串值时 输出: 但我似乎无法编写一个for循环来正确打印列表中5项的输出。有什么想法吗?

  • 问题内容: 哟,所以我试图制作一个程序,可以接受用户输入的字符串,例如:“一次一次”,然后报告该字符串包含多少个大写和小写字母: 输出示例:字符串具有8个大写字母,字符串具有5个小写字母,即时消息应该使用字符串类而不是数组,有关如何开始使用此字符串的任何提示?在此先感谢,这是我到目前为止所做的:D! 问题答案: 只需创建发现小写或大写字母时递增的计数器,如下所示:

  • 问题内容: 因此,我试图在用户输入的字符串中查找所有大写字母,但始终出现此运行时错误: 我觉得很愚蠢,但我无法弄清楚,Oracle甚至在有关java.lang.StringIndexOutOfBoundsException的页面上谈论了charAt。 这是我的代码,用于查找大写字母并打印它们: 我非常感谢您的任何投入和/或帮助。 问题答案: 应该 请记住,数组索引从零开始。 字符串长度返回 字符串

  • 问题内容: 我正在做一个作业,在该作业中,我必须编写程序以读取用户的字符串,并打印出字符串中出现次数的字母。 例如,“ Hello world”应该打印出“ h = 1 e = 1 l = 3 o = 2 …等”,但是我只写“ hello world”和字母总数。 我不能使用hashmap函数,只能使用数组。有人可以给我一两个提示,提示如何从下面的书面代码继续进行操作以获得我的首选功能?我不完全了

  • 我有这个正则表达式: 搜索: 替换为: 这将把所有单词的第一个字母替换成大写字母。例如: