-4

我如何将句号 (.) 之后的下一个单词大写?例如。

太阳升起来了。植物开始生长。

我需要做什么才能将植物中的p大写?

4

5 回答 5

8

根据您提出这个问题的方式,我假设您是一般编程的初学者,特别是 Java 编程的初学者。

所以第一个答案是Java中没有神奇的解决方案;即没有“查找并大写每个句子的第一个单词”。您(或某人)需要通过设计和编写一些代码来解决它。

解决问题的方法是将其分解为多个部分。例如,这是一种可能的故障...

  1. 给定一个输入字符串,将其拆分为句子字符串。

  2. 给定一个句子字符串,提取第一个单词。

  3. 给定一个单词,将其大写。

  4. 用新词替换句子的第一个词。

  5. 将一系列句子转换回字符串。

然后对上面的代码进行编码,并单独和一起测试它们。现有的 Java 库 API 可以为您提供帮助。例如:

(阅读这些方法的 javadocs ...)

一旦代码工作,您可以对其进行改进以使代码更好(可读、可维护等)和/或使其运行得更快。

如果您对上述方法有疑问,请随时提出后续问题。但是您需要向我们展示您的代码……或伪代码。

于 2012-11-18T01:44:49.440 回答
2

与其尝试自己寻找单词和句子的边界,不如使用BreakIterator类,一个句子实例

BreakIterator 也处理了检测指定语言环境的句子边界的所有困难,例如数字中的小数点不是句子边界。

这是一些将转换句子的示例代码:

String sentence = "The sun rose.  plants started to grow.";
StringBuilder buf = new StringBuilder(sentence);

BreakIterator bi = BreakIterator.getSentenceInstance(Locale.ENGLISH);
bi.setText(sentence);
int pos;
do
{
    pos = bi.next();
    if (pos != BreakIterator.DONE && pos < buf.length())
        buf.setCharAt(pos, Character.toUpperCase(buf.charAt(pos)));
}
while (pos != BreakIterator.DONE);

String correctedSentence = buf.toString();
System.out.println(correctedSentence);
于 2012-11-21T06:14:14.977 回答
1

Here's a solution using regular expressions:

public String capitalizeSentences(String s) {
    Pattern p = Pattern.compile("\\.\\s+\\w");
    Matcher m = p.matcher(s);
    StringBuffer buf = new StringBuffer();
    while (m.find()) m.appendReplacement(buf, m.group().toUpperCase());
    m.appendTail(buf);
    return buf.toString();
}

the pattern /\.\s+\w/ matches a sequence of a dot, one or more spaces, and a word character. Regular expressions are very powerful for string processing and supported by almost all programming languages. Learn their syntax once, and you'll be more productive in all languages!

Edit: see @prunge's solution for a much more elegant solution using Java's BreakIterator class which breaks text into sentences.

于 2012-11-18T02:14:21.613 回答
0

尝试这个。

String phrase = "The sun rose. plants started to grow";

// Split every sentence
String[] sentences = phrase.split(".");

String capitalized = "";

StringBuilder sb = new StringBuilder();

// Process every sentence
for (String str : sentences){
    // Trim the sentence. It might have a space in the beginning
    String result = str.trim();
    // get the first char
    String fc = "" + result.charAt(0);
    // Replace with capitalized one
    result = result.replace(fc, fc.toUpperCase());
    sb.append(result);
    sb.append(". "); // A full-stop and space
}

capitalized = sb.toString();
于 2012-11-18T01:59:50.463 回答
-1

你能解析整个句子吗,你的分隔符将是一个句号。那么从上面的例子中你基本上会有2个字符串;“太阳升起”和“植物开始生长”,然后您可以获取每个字符的第二个字符(将句号后的空格作为第一个字符)并将其大写。

public class mainClass {

public static void main(String[] args) {

    String phrase = " The sun rose. plants started to grow.";
    String delims = "\\."; //full stop as delimiter
    String[] tokens = phrase.split(delims);

    String capitalizedLetter;
    String word;
    String capitalizedWord;

    for(String sentence: tokens)
    {
    capitalizedLetter = sentence.substring(0, 2).toUpperCase();
    word = sentence.substring(2);
    capitalizedWord = capitalizedLetter + word;
    System.out.println(capitalizedWord + "."); //to include the missing full-stop
    } 

}

}

希望这可以帮助!祝你好运!

于 2012-11-18T01:29:13.390 回答