我的项目中的部分语法检查。 我有一个段落,我想将每个句子的所有首字母都改为大写。 句子中的所有其他字母必须小写。
"lijo was very intelligent.but his Character was not Good.He Played FootBall .
he is veryClever,and wise."
output
"Lijo was very intelligent.But his character was not good.He played football .
He is veryclever,and wise."
我做了以上这样的事情:
public static void main(String[] args) {
String org= "lijo was very 'intelligent . but his Character was not Good.He Played FootBall .he is veryClever,and wise.";
String [] temp=org.split("\\.");
int len=temp.length;
String ne = ".";
for(int i=0;i<len;i++)
{
temp[i]=temp[i].toUpperCase();
temp[i]=(temp[i].substring(0, 1)).toUpperCase()+(temp[i].substring(1, temp[i].length())).toLowerCase();
System.out.println(temp[i]);
}
}
有没有更简单的方法呢?
答案 0 :(得分:1)
你可以这样做:
private static final Pattern SENTENCE_START = Pattern.compile("(?:^|[.]\\s*)([a-z])");
private String sentenceCase(String org) {
char[] chars = org.toCharArray();
Matcher m = SENTENCE_START.matcher(org);
while (m.find()) {
chars[m.start(1)] = Character.toUpperCase(chars[m.start(1)]);
}
return new String(chars);
}
正则表达式解释:
(?:^|[.]\s*)([a-z])
(?: )
- 未命名群组
^
- 字符串的开头
|
- 或
[.]
- .
字符
\s*
- 零个或多个空格
[a-z]
- 小写字符
答案 1 :(得分:1)
NO 方法可以轻松妥善地完成此任务。确定句子的开始或结束位置非常棘手,并且存在许多微妙的问题。例如,并非所有句号都结束句子;一些可用于缩写或数字。在这些情况下,需要一个稍微复杂的语言模型才能进行合理的猜测。
此外,并不总是确定句子应该以资本开头。例如,我似乎记得以“von xxx”为首的以姓氏开头的句子不应该大写等等。
tl;博士:你可以通过简单的方式做到并且犯了很多错误,或者你可以用非常困难的方式做到这一点,让它在大多数情况下工作,但可能并非所有情况都适用。
答案 2 :(得分:1)
大多数人会告诉你分开一段时间,将文字分成句子。它适用于正确的输入,但你的第一个“先生”,“博士”。或“et.al.”会导致整件事情失败。
既然你提到了语法,你需要熟悉计算机语法。查看BNF并创建一些上下文敏感的尝试来模拟英语。然后,当你对令牌与制作有一个很好的想法时,从一个简单的字典开始,用它的可能的词性标记每一段文本(例如“root”可以是名词和动词,取决于)。
如果你精通编程,那么我在JavaCC等“编译器编译器”方面取得了不错的成功。然而,有一个学习曲线。如果你想使用解析器 - 组合器路径,你可能想要使用像JParsec这样的东西,这似乎是块上当前的“新东西”。
有了这些元素,你就会开始得到结果;但是,不要指望你的结果那么棒。这是一个很大的项目,其他人已经开始他们的职业生涯。但是,至少你会得到正确的结果(并在此过程中学到很多东西)。总是偏向于方便;因为代码有一种比简单要求更长的倾向,并且添加正确性确实是一项非常艰巨的任务。
答案 3 :(得分:0)
也许是这样的:
StringBuilder resultBuilder = new StringBuilder();
String[] parts = input.split("\\.");
for(String part : parts){
resultBuilder.append(part.substring(0,1).toUppercase())
.append(part.substring(1).toLowercase())
.append(".");
}
return resultBuilder.toString();