2

目前,我尝试使用Character.isUpperCase. 但是现在我只想检索句子中每个单词中所有第一个字母都是大写的短语。我应该怎么做。

例如,“这是一个例句,因此 Ang Mo Kio Avenue 1 是 Ang Mo Kio 的一部分。”

我会检索“Ang Mo Kio Avenue 1”和“Ang Mo Kio”。

String s = "This is a sample sentence so that Ang Mo Kio Avenue 1 is part of Ang Mo Kio.";
String[] words = s.split("[^a-zA-Z']+");
for (int i = 0; i < words.length; i++) {
  if (Character.isUpperCase(words[i].charAt(0))) {
  System.out.println(words[i]);
}}

真正的意图是提取 3 个或更多大写单词,可选地后跟一个数字

4

2 回答 2

2

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

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

尝试,

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.
于 2013-11-18T11:30:27.407 回答
1

作为基本的起始代码,您可以尝试以下功能:

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.]

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

于 2013-11-18T11:54:22.613 回答