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