如何将句点(。)之后的下一个词大写? 例如。
太阳升起了。植物开始生长。
我需要做些什么来大写植物中的 p ?
答案 0 :(得分:8)
根据你提出这个问题的方式,我假设你是编程的初学者,特别是Java编程。
所以第一个答案是Java中没有神奇的解决方案;即没有“找到并把每句话的第一个词都弄清楚”。您(或某人)需要通过设计和编写一些代码来解决它。
解决问题的方法是将其分解为部分。例如,这里有一个可能的细分......
给定一个输入String,将其拆分为句子字符串。
给定一个句子String,提取第一个单词。
说出一句话,将其大写。
用新词替换句子的第一个单词。
将一系列句子转回字符串。
然后编写上面的代码,并一起测试它们。现有的Java库API可以为您提供帮助。例如:
String.split(...)
方法根据分隔符(例如句号或一个或多个空白字符)拆分字符串。String.indexOf(...)
方法查找字符串中特定子字符串的第一个位置。String.substring(...)
方法根据字符串中的字符偏移量提取子字符串。StringBuilder
类可能很有用。(阅读每种方法的javadocs ......)
一旦代码正常工作,您可以对其进行优化以使代码更好(可读,可维护等)和/或使其运行更快。
如果您对上述方法有疑问,请随时提出后续问题。但是你需要向我们展示你的代码......或伪代码。
答案 1 :(得分:2)
您应该使用BreakIterator类sentence instance,而不是尝试自己查找单词和句子边界。
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);
答案 2 :(得分:1)
这是使用正则表达式的解决方案:
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/
匹配点,一个或多个空格和单词字符的序列。正则表达式对于字符串处理非常强大,几乎所有编程语言都支持它。一次学习它们的语法,你将在所有语言中提高效率!
编辑: 使用Java的BreakIterator
类将@文件分解为句子,查看@ prunge的解决方案以获得更优雅的解决方案。
答案 3 :(得分: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();
答案 4 :(得分:-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
}
}
}
希望这有帮助!祝你好运!