在Java中如何大写单词的第一个字母?

在Java中如何大写单词的第一个字母?,java,string,java-7,Java,String,Java 7,句号后的下一个单词如何大写。? 比如说 太阳升起来了。植物开始生长 我需要做什么才能在plants中大写p?你能解析整个句子吗,你的定界符将是一个句号。从上面的例子中,你可以得到2个字符串;太阳升起,植物开始生长,然后你可以得到每一个字符的第二个字符,在句号后的空格成为第一个字符,并将其大写 public class mainClass { public static void main(String[] args) { String phrase = " The sun rose.

句号后的下一个单词如何大写。? 比如说

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


我需要做什么才能在plants中大写p?

你能解析整个句子吗,你的定界符将是一个句号。从上面的例子中,你可以得到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
    } 

}
}


希望这有帮助!祝你好运

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

因此,第一个答案是Java中没有神奇的解决方案;i、 不,找到每个句子的第一个单词并大写。您或某人需要通过设计和编写一些代码来解决这个问题

解决这个问题的方法是把它分解成几个部分。例如,这里有一个可能的细分

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

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

给一个词,大写

用新词替换句子的第一个词

把一系列句子变回一个字符串

然后对上面的代码进行编码,并分别和一起进行测试。现有的Java库API可以帮助您。例如:

该方法基于分隔符(例如,句号或一个或多个空格字符)拆分字符串。 这些方法查找字符串中特定子字符串的第一个位置。 这些方法基于字符串中的字符偏移量提取子字符串。 这门课可能有用。 等等 请阅读这些方法的javadocs

一旦代码开始工作,您就可以对其进行优化,使代码具有更好的可读性、可维护性等,和/或使其运行更快

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

试试这个

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();

下面是一个使用正则表达式的解决方案:

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();
}
模式/\。\s+\w/匹配一个点、一个或多个空格和一个单词字符的序列。正则表达式对于字符串处理非常强大,几乎所有编程语言都支持正则表达式。只要学习一次它们的语法,您就可以在所有语言中提高效率


编辑:请参阅@prunge的解决方案,了解使用Java的BreakIterator类将文本分解成句子的更优雅的解决方案。

与其自己尝试查找单词和句子边界,不如使用一个名为a的类

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);

您使用的是哪种输入组件?错误,句子.charAt1将返回一个字符而不是字符串,n这是什么意思??用string1字符串短语表示的toUppercase=太阳升起了。植物开始生长。应该有一个;最后。2大写字母entence=句子.charAt1.toUpper;也会产生编译器错误。。3字符串delims=\\//句号作为分隔符4代码将丢失句号..顺便说一句-答案可由所有者删除或编辑。我更喜欢看“编辑”。在编辑之后,我有机会改变一个被“锁定”的否决票。很遗憾你一点也没有尝试-1您应该避免在字符串上使用+。它很慢。您最好使用str.substring0,1.toUpperCase+str.substring1,还最好使用StringBuilder来编写最终结果。代码中仍然有字符串连接。你应该避免所有这些。在幕后,Java编译器为每个+创建一个新的StringBuilder实例,调用append一次并丢弃该实例,因此最好首先在sb中调用append!SringBuilder在这里也很有用。@akuhn BreakIterator在Java 1.1中已经存在了一段时间,可能更早。如果您将-breakiterator选项传递给Javadoc,Javadoc可以使用它来解析句子,并且它可以更好地解析文档的第一句话,在文本“e.g.”中,第一句话中的“e.g.”将在打开但不关闭的情况下正确解析