次のような特殊文字を削除したい:
- + ^ . : ,
Javaを使用して文字列から。
次のような特殊文字を削除したい:
- + ^ . : ,
Javaを使用して文字列から。
replaceAll
してパターンを形成します。より難解な要件がある場合は、質問を編集してください。:)
replaceAll
それらのために行うか、または解析を行います文字列で、取り出したい文字ではない文字を別の文字列に追加し、最後に、返す文字列に+ =を実行します。
deleteChars.apply( fromString, "-+^.:," );
–ここでdeleteCharsを見つけます
回答:
それはあなたが特殊文字として定義するものに依存しますが、試してみてくださいreplaceAll(...)
:
String result = yourString.replaceAll("[-+.^:,]","");
注ことを^
あなたはどちらかそれをエスケープする必要があるだろうか、それは「任意のこれらの文字」を意味するからである文字は、リストの最初の1であってはなりません。
別の注意:-
文字はリストの最初または最後の文字である必要があります。そうでない場合は、エスケープする必要があります。そうしないと、範囲が定義されます(たとえば:-,
、「:
からの範囲内のすべての文字」を意味します,
)。
だから、文字の位置に依存一貫性を維持していないために、あなたは正規表現で特別な意味を持っているすべてのそれらの文字をエスケープする場合があります(以下のリストは、それほどのような他の文字を認識して、完全ではない(
、{
、$
など) :
String result = yourString.replaceAll("[\\-\\+\\.\\^:,]","");
すべての句読点と記号を削除したい場合は、この正規表現を試してください:( \p{P}\p{S}
Java文字列では、バックスラッシュをエスケープする必要があることに注意してください:) "\\p{P}\\p{S}"
。
文字列に何を残すかを正確に定義できる場合、3番目の方法は次のようになります。
String result = yourString.replaceAll("[^\\w\\s]","");
つまり、単語文字(いずれの場合も、0〜9または_)または空白以外のすべてを置き換えます。
編集:役立つと思われるパターンが他にもいくつかあることに注意してください。ただし、すべてを説明することはできないので、regular-expressions.infoのリファレンスセクションをご覧ください。
Rayが提案しているように、「許可された文字を定義する」アプローチに代わる制限の少ない方法を次に示します。
String result = yourString.replaceAll("[^\\p{L}\\p{Z}]","");
正規表現は、どの言語の文字でも区切り文字でもないすべてのもの(空白、改行など)に一致します。使用できないことに注意してください[\P{L}\P{Z}]
(大文字のPはそのプロパティがないことを意味します)。これは、文字が空白ではないため、ほぼすべてに一致する「文字でも空白でもないすべて」を意味するためです。
Unicodeに関する追加情報
一部のUnicode文字は、(単一のコードポイントまたはコードポイントの組み合わせとして)エンコードする方法が異なるため、問題を引き起こすようです。詳細については、regular-expressions.infoを参照してください。
[\P{L}]
-
文字はリストの最初または最後である必要があり、そうでない場合はエスケープする必要があることに注意してください。
[^\\p{L}\\p{Z}]
ドイツ語のウムラウト(ä、ö、ü)も削除しているようです(少なくとも私にとってはそうです:/)。したがって、「正規表現はどの言語の文字でもないものすべてに一致します」は100%正しくないようです。
String result = yourString.replaceAll("[^\w\s]","");
がエラーをInvalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ )
これにより、英数字を除くすべての文字が置き換えられます
replaceAll("[^A-Za-z0-9]","");
ここで説明されているように http://developer.android.com/reference/java/util/regex/Pattern.html
パターンはコンパイルされた正規表現です。多くの場合、のような便利なメソッド
String.matches
、String.replaceAll
およびString.split
好ましいであろうが、あなたは同じ正規表現で多くの作業を行う必要がある場合、一度それをコンパイルし、それを再利用する方が効率的かもしれません。PatternクラスとそのコンパニオンであるMatcherも、Stringによって公開される少量よりも多くの機能を提供します。
public class RegularExpressionTest {
public static void main(String[] args) {
System.out.println("String is = "+getOnlyStrings("!&(*^*(^(+one(&(^()(*)(*&^%$#@!#$%^&*()("));
System.out.println("Number is = "+getOnlyDigits("&(*^*(^(+91-&*9hi-639-0097(&(^("));
}
public static String getOnlyDigits(String s) {
Pattern pattern = Pattern.compile("[^0-9]");
Matcher matcher = pattern.matcher(s);
String number = matcher.replaceAll("");
return number;
}
public static String getOnlyStrings(String s) {
Pattern pattern = Pattern.compile("[^a-z A-Z]");
Matcher matcher = pattern.matcher(s);
String number = matcher.replaceAll("");
return number;
}
}
結果
String is = one
Number is = 9196390097
特殊文字を削除するには
String t2 = "!@#$%^&*()-';,./?><+abdd";
t2 = t2.replaceAll("\\W+","");
出力は次のようになります: abdd.
これは完全に機能します。
String.replaceAll()
Javaでメソッドを使用します。
replaceAllは、問題を解決するのに十分なはずです。
String
クラスのドキュメントを読んでみましたか?特に、「正規表現」という単語を探します。いくつかの方法があり、少し考えて進め方を教えてください... :)