有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

用java实现字符串-句子-大小写转换

在java中实现句子大小写转换的最佳方法是什么

例如: 今天是星期一。昨天是星期天。星期一之后是星期二

产出将是 今天是星期一 昨天是星期天 星期一之后是星期四

我的逻辑是:

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

  • 检查'.'并将'. '之后的第一个字符转换为大写字母


共 (5) 个答案

  1. # 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)匹配行或点的开头,后跟可选空格,然后是单词字符

  2. # 2 楼答案

    看看StringCharacterIterator。迭代直到找到一个点(或其他分隔符),然后查找下一个字母(在找到它之前可能是一些空格/换行符),并使其大写

  3. # 3 楼答案

    另一个解决方案:

    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
    
  4. # 4 楼答案

    你的逻辑看起来不错。再多一点代码:

    • sentence.split("[\\.?!]")会给你一组句子(按标点符号分开)
    • 包括缩写词的特殊情况,如5分钟
    • 不要转换为小写-您可能会丢失专有名称的大小写
    • 将每个句子的第一个字母改为大写(在此之前删去所有空格)
  5. # 5 楼答案

    除了缩写词,例如,或3磅重的缩写词,这些都会给你带来麻烦,而且没有一个很好的方法自动检测句子的开头。(注意:缩写也可以是专有名称,比如纽约的N.Y.,因此没有详尽的列表)

    你还需要用吗?和作为句子分隔符