web-dev-qa-db-ja.com

文字列から特殊文字を削除する方法は?

次のような特殊文字を削除したい:

- + ^ . : ,

javaを使用した文字列から。

72
Sameek Mishra

これは、特殊文字として定義するものによって異なりますが、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 を参照してください。

230
Thomas

ここで説明されているように http://developer.Android.com/reference/Java/util/regex/Pattern.html

パターンはコンパイルされた正規表現です。多くの場合、String.matchesString.replaceAllString.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
16
turbandroid

StringクラスのreplaceAll()メソッドを試してください。

ところで、ここにメソッド、戻り値の型、パラメータがあります。

public String replaceAll(String regex,
                         String replacement)

例:

String str = "Hello +-^ my + - friends ^ ^^-- ^^^ +!";
str = str.replaceAll("[-+^]*", "");

削除したいすべての{'^'、 '+'、 '-'}文字を削除する必要があります!

14
omt66

これにより、英数字以外のすべての文字が置き換えられます

replaceAll("[^A-Za-z0-9]","");
12
Stephen

特殊文字を削除するには

String t2 = "!@#$%^&*()-';,./?><+abdd";

t2 = t2.replaceAll("\\W+","");

出力はabdd.になります

これは完全に機能します。

3
Akila

JavaでString.replaceAll()メソッドを使用します。 replaceAll は問題に十分対応できるはずです。

2
MT.

次のように単一の文字を削除できます。

String str="+919595354336";

 String result = str.replaceAll("\\\\+","");

 System.out.println(result);

出力:

919595354336
1
Satya

Javaでリテラル置換を実行する場合は、Pattern.quote(string)を使用して任意の文字列をリテラルにエスケープします。

myString.replaceAll(Pattern.quote(matchingStr), replacementStr)
0
Tezra