使用java进行句子转换

时间:2011-06-13 11:09:32

标签: java string

在java

中实现句子转换的最佳方法是什么?

例如: 今天是星期一。昨天是星期天。星期一是在星期一之后来的。

输出将是 T 今天是星期一。 Y 酯日是星期天。星期一之后 T uesday

我的逻辑是:

  • 将整个句子转换为小写字母。

  • 检查'.'并在'. '

  • 之后将第一个字符转换为大写字母

5 个答案:

答案 0 :(得分:3)

你的逻辑很好看。多一点代码:

  • sentence.split("[\\.?!]")会给你一系列句子(分裂标点符号
  • 包括缩写的特殊情况,例如5分钟。
  • 不要转换为小写 - 您可能会失去专有名称的大小写
  • 将每个句子的第一个字母改为大写(在此之前修剪任何空格)

答案 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