次のような特殊文字を削除したい:
- + ^ . : ,
javaを使用した文字列から。
これは、特殊文字として定義するものによって異なりますが、replaceAll(...)
を試してください。
String result = yourString.replaceAll("[-+.^:,]","");
^
文字は、リストの最初の文字であってはなりません。エスケープする必要があるか、「これらの文字以外の文字」を意味するためです。
別の注意:-
文字はリストの最初または最後の文字である必要があります。そうでない場合は、エスケープするか、範囲を定義する必要があります(たとえば、:-,
は「:
から,
の範囲のすべての文字」を意味します)。
したがって、一貫性を保ち、文字の位置に依存しないように、正規表現で特別な意味を持つすべての文字をエスケープすることができます(次のリストは完全ではないため、(
、{
、$
などの他の文字に注意してください等。):
String result = yourString.replaceAll("[\\-\\+\\.\\^:,]","");
句読点と記号をすべて削除したい場合は、次の正規表現を試してください:\p{P}\p{S}
(Java文字列ではバックスラッシュをエスケープする必要があることに注意してください:"\\p{P}\\p{S}"
)。
文字列に何を残すかを正確に定義できる場合、3番目の方法は次のようになります。
String result = yourString.replaceAll("[^\\w\\s]","");
これは、Word文字(いずれの場合もa-z、0-9または_)または空白以外のすべてを置き換えることを意味します。
編集:他にも役立つパターンがいくつかあることに注意してください。ただし、すべてを説明することはできませんので、 regular-expressions.info の参照セクションをご覧ください。
以下は、Rayが提案した「許可された文字を定義する」アプローチの制限が緩和された方法です。
String result = yourString.replaceAll("[^\\p{L}\\p{Z}]","");
正規表現は、すべての言語の文字ではなく、区切り文字(空白、改行など)ではないすべてのものに一致します。 [\P{L}\P{Z}]
を使用できないことに注意してください(大文字のPはそのプロパティを持たないことを意味します)。これは、「文字ではないすべてまたは空白ではないすべて」を意味します。
Unicodeに関する追加情報
一部のユニコード文字は、(単一のコードポイントまたはコードポイントの組み合わせとして)さまざまなエンコード方法が原因で問題を引き起こすようです。詳細については、 regular-expressions.info を参照してください。
ここで説明されているように 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
クラスのreplaceAll()
メソッドを試してください。
ところで、ここにメソッド、戻り値の型、パラメータがあります。
public String replaceAll(String regex,
String replacement)
例:
String str = "Hello +-^ my + - friends ^ ^^-- ^^^ +!";
str = str.replaceAll("[-+^]*", "");
削除したいすべての{'^'、 '+'、 '-'}文字を削除する必要があります!
これにより、英数字以外のすべての文字が置き換えられます
replaceAll("[^A-Za-z0-9]","");
特殊文字を削除するには
String t2 = "!@#$%^&*()-';,./?><+abdd";
t2 = t2.replaceAll("\\W+","");
出力はabdd.
になります
これは完全に機能します。
JavaでString.replaceAll()
メソッドを使用します。 replaceAll は問題に十分対応できるはずです。
次のように単一の文字を削除できます。
String str="+919595354336";
String result = str.replaceAll("\\\\+","");
System.out.println(result);
出力:
919595354336
Javaでリテラル置換を実行する場合は、Pattern.quote(string)
を使用して任意の文字列をリテラルにエスケープします。
myString.replaceAll(Pattern.quote(matchingStr), replacementStr)