2017-04-06 17 views
0

文字列が"ja.v_,a"の場合、どのように非文字文字をすべて削除して"java"を出力できますか?私はstr = str.replaceAll("\\W", "")を試しましたが、無駄です。文字列内の文字以外の文字をすべて削除する

+0

どのようなプログラミング言語をお使いですか? – Sedrick

+1

'[^ a-z]'を削除/置換しますか? (すなわち、すべての非文字 'a..z'シンボル) –

+1

すべての文字をチェックするforループを使用します。それが文字の場合は、文字列に連結します。 Character.isAlphabetic()は開始点です – Sedrick

答えて

1

これを試してもよろしいですか?

System.out.println("ja.v_,a".replaceAll("[^a-zA-Z]", "")) //java 
+0

これは機能しました。ありがとう! – Eragon20

0
String s = "ja.v_,a"; 
s = s.replaceAll("[^a-z]", ""); 
System.out.println(s); 

>java 
2

私はthis articleを参照し、それを引用したいと思います:

正規表現の例とチュートリアルは、常にあなたの「英数字の入力を検証する」[-ZA-Z0-9] +正規表現を与えます。これは多くの検証フレームワークに組み込まれています。そしてそれはまったく間違っています。これはかなり良い説明がない限り、あなたのコードのどこにも現れてはいけない正規表現です。しかし、その例はどこにでもあります。代わりに、右の正規表現がある[\ pを{L} 0-9] +

は、だからあなたの場合には、それは次のようになります。 \p{L}は "手紙" のUnicodeの定義である

str.replaceAll("[^\\p{L}]", ""); 
System.out.println("ja.v_,a".replaceAll("[^\\p{L}]", "")); 
System.out.println("сл-=о-_=во!".replaceAll("[^\\p{L}]", "")); 

+0

ステートメント 'str.replaceAll(" [^ \ p {L}] "、" ");'は役に立たない。あなたは何とか結果を使用する必要があります。 –

+1

@AndyTurnerこれは本当ですが、私の指摘は、2017年の '' a-z "'パターンは、良い開発者が慣れるための最良の解決策ではないということでした。その根拠は、私が言及した記事に記載されています。 –

+1

これは重要な答えです。 '\ p {L}'がUnicodeの "文字"の定義であるという説明だけを追加します。 –

1
String test= "ja.v_,a"; 

int len=test.length(); 

String alphaString=""; 

for(int i=0; i<len; i++){ 
    if (Character.isLetter(test.charAt(i))) { 
     alphaString=alphaString+test.charAt(i); 
    } 
} 

System.out.println(alphaString); 
関連する問題