2013-09-16 20 views
41

私は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; 

すべての文字以外の文字を削除する方法はありません。私はregexesとイテレータを使用してみました。助けてくれてありがとう。

答えて

75

この最初は、すべての非文字の文字を削除小文字に折りたたまれ、その後、一行ですべての仕事をして、入力を分割:分割はまだなりますので

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

スペースが最初に入力して残されています作業。

の分割前にの分割を削除すると、要素をループする必要がなくなります。

+32

句読点を削除することが目的ならば、replaceAll( "\\ p {P}"、 "") 'は意味がありますか? – VGR

+0

@VGRというタイトルに基づいていますが、OPは問題を明確にします*すべての非文字を削除します* – Bohemian

+1

"å"は文字ですか?その文字は削除されるので、 –

2

あなたはこれを試す可能性があります -

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); 

​​は非単語の文字にマッチしますので、上記の正規表現は、すべての非単語文字と一致し、削除します。

+0

これは数字を置き換えることはありません両方が含まれます。私は非手紙の下に来ると思います。 –

+1

@RohitJain: - はい私はあなたの意見を持っています。しかし、私はしばしば言葉で使用する句読点を考えました。私は句読点の文字通りの意味をとった! –

+0

あなたの責任ではありません。 OPの質問はこれについて明確ではありません。 –

3

あなたは(あなたの問題与えられた非常に不必要と思われる)正規表現を使用したくない場合は、おそらくあなたは、このような何か試してみてください:

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(); 
} 

それは根本的なchar[]をループStringのみアペンドでのcharが文字か桁(すべての記号を除外していると仮定しています)を入力して、charの小文字のバージョンを追加します。

+7

正規表現を学習して時間を節約した人は誰もいません – slater

0

私はregexを使いたくないので、別の簡単な解決法があります。

public String removePunctuations(String s) { 
    String res = ""; 
    for (Character c : s.toCharArray()) { 
     if(Character.isLetterOrDigit(c)) 
      res += c; 
    } 
    return res; 
} 

注:これは、文字と数字

関連する問題