web-dev-qa-db-ja.com

Javaで入力テキストから句読点を削除するにはどうすればよいですか?

Javaのユーザーからの入力を使用して文を取得しようとしていますが、小文字にしてすべての句読点を削除する必要があります。ここに私のコードがあります:

    String[] words = instring.split("\\s+");
    for (int i = 0; i < words.length; i++) {
        words[i] = words[i].toLowerCase();
    }
    String[] wordsout = new String[50];
    Arrays.fill(wordsout,"");
    int e = 0;
    for (int i = 0; i < words.length; i++) {
        if (words[i] != "") {
            wordsout[e] = words[e];
            wordsout[e] = wordsout[e].replaceAll(" ", "");
            e++;
        }
    }
    return wordsout;

文字以外の文字をすべて削除する方法を見つけることができないようです。私は運のない正規表現とイテレータを使用してみました。助けてくれてありがとう。

55
TheDoctor

これは、最初にすべての非文字を削除し、小文字に折り畳んでから、入力を分割し、すべての作業を1行で実行します。

String[] words = instring.replaceAll("[^a-zA-Z ]", "").toLowerCase().split("\\s+");

最初はスペースが入力に残っているため、分割は引き続き機能します。

ゴミ文字before splittingを削除することで、要素をループする必要がなくなります。

98
Bohemian

以下を使用できます 正規表現の構成

句読点:! "#$%& '()* +、-。/ :; <=>?@ [] ^ _` {|}〜のいずれか

inputString.replaceAll("\\p{Punct}", "");
9
ravthiru

これを試すことができます:-

Scanner scan = new Scanner(System.in);
System.out.println("Type a sentence and press enter.");
String input = scan.nextLine();
String strippedInput = input.replaceAll("\\W", "");
System.out.println("Your string: " + strippedInput);

[^\w]は非Word文字と一致するため、上記の正規表現はすべての非Word文字と一致して削除します。

5
Rahul Tripathi

RegExを使用したくない場合(問題を考えると非常に不要なようです)、おそらく次のようなものを試してください。

public String modified(final String input){
    final StringBuilder builder = new StringBuilder();
    for(final char c : input.toCharArray())
        if(Character.isLetterOrDigit(c))
            builder.append(Character.isLowerCase(c) ? c : Character.toLowerCase(c));
    return builder.toString();
}

String内の基になるchar[]をループし、それが文字または数字の場合にのみcharを追加します(すべてのシンボルを除外します。 )小文字のcharを追加します。

3
Josh M