ピリオド (.) の後に来る次の単語を大文字にするにはどうすればよいですか? 例えば。
太陽が昇った。植物が育ち始めました。
plantのpを大文字にするにはどうすればよいですか?
あなたがこの質問をした方法に基づいて、私はあなたがプログラミング全般、特に Java プログラミングの初心者であると想定しています。
したがって、最初の答えは、Java には魔法のような解決策はないということです。つまり、「すべての文の最初の単語を見つけて大文字にする」ことはありません。あなた (または誰か) は、いくつかのコードを設計して書くことによって、それを解決する必要があります。
問題を解決する方法は、それを部分に分解することです。たとえば、ここに考えられる内訳が 1 つあります ...
入力文字列を指定すると、それを文文字列に分割します。
文 String を指定して、最初の単語を抽出します。
単語を指定したら、大文字にします。
文の最初の単語を新しい単語に置き換えます。
一連の文を文字列に戻します。
次に、上記をコーディングし、それらを個別に、またはまとめてテストします。役立つ既存の Java ライブラリ API があります。例えば:
String.split(...)
メソッドは、区切り文字 (ピリオド、または 1 つ以上の空白文字など) に基づいて String を分割します。String.indexOf(...)
メソッドは、文字列内の特定の部分文字列の最初の位置を見つけます。String.substring(...)
、文字列内の文字オフセットに基づいて部分文字列を抽出します。StringBuilder
クラスは役に立つかもしれません。(これらの各メソッドの javadoc を読んでください ...)
コードが機能するようになったら、コードを改良して (読みやすく、保守しやすくするなど)、より高速に実行できるようにします。
上記のアプローチに問題がある場合は、お気軽にフォローアップの質問をしてください。ただし、コードまたは疑似コードを提示する必要があります。
単語と文の境界を自分で見つけようとするのではなく、文のインスタンスである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);
正規表現を使用した解決策は次のとおりです。
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/
は、ドット、1つ以上のスペース、および単語文字のシーケンスと一致します。正規表現は文字列処理に非常に強力であり、ほとんどすべてのプログラミング言語でサポートされています。それらの構文を一度学ぶと、すべての言語でより生産的になります!
編集: テキストを文に分割するJavaのクラスを使用した、はるかに洗練されたソリューションについては、@prungeのソリューションを参照してください。BreakIterator
Try this.
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つの文字列があります。「太陽が昇った」、「植物が成長し始めた」の場合、それぞれの 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
}
}
}
お役に立てれば!頑張ってください!