Java 获取每个单词以大写字母开头的短语

Java 获取每个单词以大写字母开头的短语,java,string-search,Java,String Search,目前,我尝试使用Character.isUpperCase获取句子中以大写字母开头的单词。然而,现在我只想检索句子中的短语,其中短语每个单词的第一个字母都是大写的。我该怎么做呢 例如,“这是一个示例句,因此昂莫桥大道1是昂莫桥的一部分。” 我会取回“昂莫桥1号大道”和“昂莫桥” String s=“这是一个示例句子,因此昂莫桥大道1号是昂莫桥的一部分。”; String[]words=s.split([^a-zA-Z']+”); for(int i=0;i

目前,我尝试使用
Character.isUpperCase
获取句子中以大写字母开头的单词。然而,现在我只想检索句子中的短语,其中短语每个单词的第一个字母都是大写的。我该怎么做呢

例如,“这是一个示例句,因此昂莫桥大道1是昂莫桥的一部分。”

我会取回“昂莫桥1号大道”和“昂莫桥”

String s=“这是一个示例句子,因此昂莫桥大道1号是昂莫桥的一部分。”;
String[]words=s.split([^a-zA-Z']+”);
for(int i=0;i
真正的目的是提取3个或更多大写单词,可选地后跟一个数字

我只想检索句子中所有第一个 这个短语中每个单词的字母都是大写的

为此,您需要捕获连续的大写单词,并将它们附加到StringBuilder中。如果出现小写字母,则初始化StringBuilder

试试看


作为基本启动代码,您可以尝试以下函数:

private static void printStreetNames(String text) {
    List<String> words = new ArrayList<String>();

    for (String w : text.split("\\s+")) {
        if (Character.isUpperCase(w.charAt(0))) {
            words.add(w);
            continue;
        }

        if (w.matches("\\d+") && words.size() > 1) {
            words.add(w);
            continue;
        }

        if (words.size() >= 2) {
            System.out.println(words);
        }
        words = new ArrayList<String>();
    }

    if (words.size() >= 2) {
        System.out.println(words);
    }
}

不过也有一些警告。例如,以下内容无法正确解析:
Ang Mo Kio 1 1
(因为我们不检查是否已添加街道号码)。此外,它不会从解析的街道名称(例如,
Kio.
)中删除尾随的
,但我将把它留给您作为练习。

我不明白1如何是大写的,以及为什么即使是大写的,也不会包含在预期的输出中。同样,通过使用
\\s
进行拆分,您可以将标点符号包含到单词中。@m0skit0似乎是短语的一部分。.为了我的强迫症,将
isPrase
替换为
isPrase
,这似乎是一个不错的答案。使用
StringBuilder
,也值得称赞,尽管实现它的目的是
存储短语可能更吸引人。您还需要在程序末尾打印答案,以便在最后一个单词以大写字母开头时打印出来。我想真正的目的是提取2个或更多大写单词,(可选)后面跟一个街道号码,但OP可能需要对此进行澄清。是的,因为Matt对混淆表示抱歉。嗨,如果我只想接受字母和数字,我应该使用什么表达。当前\\s包含标点符号
StringBuilder answer = new StringBuilder();
String s
 = "This is a sample sentence so that Ang Mo Kio Avenue 1 is part of Ang Mo Kio.";
    String[] words = s.split("\\s+");
    int count=0;
    for (int i = 0; i < words.length; i++) {
        char firstChar=words[i].charAt(0);
        if (Character.isUpperCase(firstChar) 
                 ||(count>0  && Character.isDigit(firstChar))) {
            answer.append(" "+words[i]);
            count++;
        } else {
            //To avoid less than 3 word apply this logic.
            if(count>2){
            System.out.println(answer);
            }
            count=0;
            answer = new StringBuilder();
        }
    }
    System.out.println(answer);// Also need to print answer here.
 Ang Mo Kio Avenue 1
 Ang Mo Kio.
private static void printStreetNames(String text) {
    List<String> words = new ArrayList<String>();

    for (String w : text.split("\\s+")) {
        if (Character.isUpperCase(w.charAt(0))) {
            words.add(w);
            continue;
        }

        if (w.matches("\\d+") && words.size() > 1) {
            words.add(w);
            continue;
        }

        if (words.size() >= 2) {
            System.out.println(words);
        }
        words = new ArrayList<String>();
    }

    if (words.size() >= 2) {
        System.out.println(words);
    }
}
[Ang, Mo, Kio, Avenue, 1]
[Ang, Mo, Kio.]