在java
中实现句子转换的最佳方法是什么?例如: 今天是星期一。昨天是星期天。星期一是在星期一之后来的。
输出将是 T 今天是星期一。 Y 酯日是星期天。星期一之后 T uesday
我的逻辑是:
将整个句子转换为小写字母。
检查'.'
并在'. '
答案 0 :(得分:3)
你的逻辑很好看。多一点代码:
sentence.split("[\\.?!]")
会给你一系列句子(分裂标点符号答案 1 :(得分:1)
除了缩写之外,例如或者3磅的重量 - 这些会让你陷入困境,而且没有很好的方法可以自动检测句子的开头。 (注意:缩写也可以是正确的名称,如纽约的N.Y.所以没有详尽的清单)
你还需要使用?而且!作为句子分隔符。
答案 2 :(得分:1)
以下是您的解决方案:
String input = "today is monday. yesterday was sunday. tuesday comes after monday";
StringBuffer buffy = new StringBuffer(input); // You may want to .toLowerCase() - up to you
Pattern pattern = Pattern.compile("(^|\\.)\\s*(\\w)");
Matcher matcher = pattern.matcher(buffy);
while (matcher.find())
buffy.replace(matcher.end() - 1, matcher.end(), matcher.group(2).toUpperCase());
System.out.println(buffy); // Today is monday. Yesterday was sunday. Tuesday comes after monday
正则表达式(^|\\.)\\s*(\\w)
匹配行的开头或点,后跟可选的空格,然后是单词字符。
答案 3 :(得分:0)
看看StringCharacterIterator。你迭代直到找到一个点(或其他分隔符),然后寻找下一个字母(可能是一些空格/换行符,直到你到达它)并将其设为大写。
答案 4 :(得分:0)
另一种解决方案:
StringBuilder txt = new StringBuilder("today is monday. yetserday was sunday. tuesday comes after monday");
int pos = -1;
do
{
txt.replace(pos + 1, pos + 2, txt.substring(pos + 1,pos + 2).toUpperCase());
pos = txt.indexOf(".", pos) + 1;
}
while(pos > 0 && pos < txt.length());
System.out.println(txt.toString());
<强>输出:强>
Today is monday. Yetserday was sunday. Tuesday comes after monday