0

行の単語を分割してピリオドがあるかどうかを確認しようとしましたが、エラーが発生しました:

falls.falls.falls.Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6
at Alpha.main(Alpha.java:10)     

コード:

import java.io.*;
import java.util.*;

public class Alpha
{
    public static void main(String[] args)
    {
        String phrase = "the moon falls. the flowers grew.";
        String beta = "";
        String[] array = phrase.split(" ");
        for (int i = 0; i < array.length; i++)
        {
            if (array[i].endsWith("."))
            {
                array[i + 1] = array[i + 1].substring(0, 1).toUpperCase() + array[i + 1].substring(1);

                beta = beta + array[i];
            }
            System.out.print(beta);
        }
    }
}

(また、それが配列の別の単語を呼び出す方法ではないと思います。それを修正する方法についての提案はありますか?)

4

4 に答える 4

1

入力が で終わるケースを処理していません..また、一般的な文では、次の文が続く前にスペースが続く場合があります。それも考慮する必要があります。また、このバージョンindexOffromIndex.

于 2012-11-18T04:13:44.697 に答える
0

"." で split() を使用することをお勧めします。そうすれば、ピリオドの後に文字があるかどうかを確認し、大文字にすることができます。

于 2012-11-18T04:11:58.323 に答える
0

質問のコードに基づいて正規表現は文に一致します

import java.util.regex.*;
public class TEST {
    public static void main(String[] args) {
        String subjectString = 
        "This is a sentence. " +
        "So is \"this\"! And is \"this?\" " +
        "This is 'stackoverflow.com!' " +
        "Hello World";
        String[] sentences = null;
        Pattern re = Pattern.compile(
            "# Match a sentence ending in punctuation or EOS.\n" +
            "[^.!?\\s]    # First char is non-punct, non-ws\n" +
            "[^.!?]*      # Greedily consume up to punctuation.\n" +
            "(?:          # Group for unrolling the loop.\n" +
            "  [.!?]      # (special) inner punctuation ok if\n" +
            "  (?!['\"]?\\s|$)  # not followed by ws or EOS.\n" +
            "  [^.!?]*    # Greedily consume up to punctuation.\n" +
            ")*           # Zero or more (special normal*)\n" +
            "[.!?]?       # Optional ending punctuation.\n" +
            "['\"]?       # Optional closing quote.\n" +
            "(?=\\s|$)", 
            Pattern.MULTILINE | Pattern.COMMENTS);
        Matcher reMatcher = re.matcher(subjectString);
        while (reMatcher.find()) {
            String sentence = reMatcher.group();
            sentence = sentence.substring(0,1).toUpperCase() + sentence.substring(1);
            System.out.println(sentence);
        } 
    }
}
于 2012-11-18T04:14:04.303 に答える
0

このことを考慮:

    String phrase = "the moon falls. the flowers grew.";
    char[] a = phrase.toCharArray();
    boolean f = true;
    for (int i = 0; i < a.length; i++) {
        if (f) {
            if (a[i] != ' ') {
                a[i] = Character.toUpperCase(a[i]);
                f = false;
            }
        } else if (a[i] == '.') {
            f = true;
        }
    }
    phrase = new String(a);
    System.out.println(phrase);
于 2012-11-18T04:31:50.020 に答える