我如何将句号 (.) 之后的下一个单词大写?例如。
太阳升起来了。植物开始生长。
我需要做什么才能将植物中的p大写?
根据您提出这个问题的方式,我假设您是一般编程的初学者,特别是 Java 编程的初学者。
所以第一个答案是Java中没有神奇的解决方案;即没有“查找并大写每个句子的第一个单词”。您(或某人)需要通过设计和编写一些代码来解决它。
解决问题的方法是将其分解为多个部分。例如,这是一种可能的故障...
给定一个输入字符串,将其拆分为句子字符串。
给定一个句子字符串,提取第一个单词。
给定一个单词,将其大写。
用新词替换句子的第一个词。
将一系列句子转换回字符串。
然后对上面的代码进行编码,并单独和一起测试它们。现有的 Java 库 API 可以为您提供帮助。例如:
String.split(...)
方法基于分隔符(例如句号,或一个或多个空白字符)拆分字符串。String.indexOf(...)
方法查找字符串中特定子字符串的第一个位置。String.substring(...)
方法根据字符串中的字符偏移量提取子字符串。StringBuilder
课程可能很有用。(阅读这些方法的 javadocs ...)
一旦代码工作,您可以对其进行改进以使代码更好(可读、可维护等)和/或使其运行得更快。
如果您对上述方法有疑问,请随时提出后续问题。但是您需要向我们展示您的代码……或伪代码。
与其尝试自己寻找单词和句子的边界,不如使用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);
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.
尝试这个。
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();
你能解析整个句子吗,你的分隔符将是一个句号。那么从上面的例子中你基本上会有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
}
}
}
希望这可以帮助!祝你好运!