-4

ピリオド (.) の後に来る次の単語を大文字にするにはどうすればよいですか? 例えば。

太陽が昇った。植物が育ち始めました。

plantのpを大文字にするにはどうすればよいですか?

4

5 に答える 5

8

あなたがこの質問をした方法に基づいて、私はあなたがプログラミング全般、特に Java プログラミングの初心者であると想定しています。

したがって、最初の答えは、Java には魔法のような解決策はないということです。つまり、「すべての文の最初の単語を見つけて大文字にする」ことはありません。あなた (または誰か) は、いくつかのコードを設計して書くことによって、それを解決する必要があります。

問題を解決する方法は、それを部分に分解することです。たとえば、ここに考えられる内訳が 1 つあります ...

  1. 入力文字列を指定すると、それを文文字列に分割します。

  2. 文 String を指定して、最初の単語を抽出します。

  3. 単語を指定したら、大文字にします。

  4. 文の最初の単語を新しい単語に置き換えます。

  5. 一連の文を文字列に戻します。

次に、上記をコーディングし、それらを個別に、またはまとめてテストします。役立つ既存の Java ライブラリ API があります。例えば:

  • このString.split(...)メソッドは、区切り文字 (ピリオド、または 1 つ以上の空白文字など) に基づいて String を分割します。
  • String.indexOf(...)メソッドは、文字列内の特定の部分文字列の最初の位置を見つけます。
  • メソッドはString.substring(...)、文字列内の文字オフセットに基づいて部分文字列を抽出します。
  • StringBuilderクラスは役に立つかもしれません。
  • 等々。

(これらの各メソッドの javadoc を読んでください ...)

コードが機能するようになったら、コードを改良して (読みやすく、保守しやすくするなど)、より高速に実行できるようにします。

上記のアプローチに問題がある場合は、お気軽にフォローアップの質問をしてください。ただし、コードまたは疑似コードを提示する必要があります。

于 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

正規表現を使用した解決策は次のとおりです。

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

于 2012-11-18T02:14:21.613 に答える
0

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();
于 2012-11-18T01:59:50.463 に答える
-1

文全体を解析できますか?区切り文字はピリオドになります。上記の例から、基本的に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
    } 

}

}

お役に立てれば!頑張ってください!

于 2012-11-18T01:29:13.390 に答える