文字列内の特殊文字を置き換える方法は?


回答:


186

それはあなたの意味次第です。それらを取り除くだけの場合は、
次のようにします(更新:数字も保持したいようです。その場合は2行目を使用してください)。

String alphaOnly = input.replaceAll("[^a-zA-Z]+","");
String alphaAndDigits = input.replaceAll("[^a-zA-Z0-9]+","");

または同等:

String alphaOnly = input.replaceAll("[^\\p{Alpha}]+","");
String alphaAndDigits = input.replaceAll("[^\\p{Alpha}\\p{Digit}]+","");

(これらすべては、正規表現パターンをプリコンパイルして定数に格納することで大幅に改善できます)

または、グアバで

private static final CharMatcher ALNUM =
  CharMatcher.inRange('a', 'z').or(CharMatcher.inRange('A', 'Z'))
  .or(CharMatcher.inRange('0', '9')).precomputed();
// ...
String alphaAndDigits = ALNUM.retainFrom(input);

しかし、アクセント付きの文字を、まだASCIIの賢明なものに変えたい場合は、次の質問を見てください。


私はこの機能を使用していたときにwell.but私いけないremove.justたい数字は特別なcharacters.Pleaseを削除するように、すべての数字を削除して、何か..示唆
Tanu

まあ、あなたはアルファベットだけが欲しいと言った。しかし、私はすぐに私の答えを更新します
ショーンパトリックフロイド

何の連結が2.Ifは結果が1以下、次の形式の例で、連結文字列よりも必要としない私は、連結文字列にしたいが、1.Ifのようないくつかの条件に一つだけの結果があります:スタック+オーバー+は流れ
Tanu

2
@Tanuそれは別の質問です。新しいものにする
Pekka

スペースを削除したくない場合はどうすればよいですか?または、タブのようなすべてのスペース、改行は1つのスペースとして折りたたまれたと言いますか?
のろわ

74

これを使っています。

s = s.replaceAll("\\W", ""); 

文字列のすべての特殊文字を置き換えます。

ここに

\ w:単語の文字、[a-zA-Z_0-9]の短縮形

\ W:非単語文字


<script> alert( 'XSS Attack')</ script>では機能しません。「<」、「>」、「\」の文字を削除するにはどうすればよいですか?
Manoj

11

次の方法を使用して、英数字を保持できます。

replaceAll("[^a-zA-Z0-9]", "");

そして、アルファベット文字だけを保持したい場合は、これを使用してください

replaceAll("[^a-zA-Z]", "");

5
スペース使用の場合replaceAll("[^a-zA-Z0-9 ]", "");
カマル

5

特殊文字を

replaceAll("\\your special character","new character");

ex:すべての*を空白で置き換える

replaceAll("\\*","");

*このステートメントは、一度に1つのタイプの特殊文字のみを置き換えることができます


「文字列内の特殊文字を置き換える方法は?」という質問のタイトルを見たとき、私が探していたものは間違いありません。ありがとう!
Mr.Drew

2
string Output = Regex.Replace(Input, @"([ a-zA-Z0-9&, _]|^\s)", "");

ここでは、スペース、コンマ、アンパサンドを除くすべての特殊文字が置き換えられています。次の正規表現を使用して、スペース、カンマ、アンパサンドを省略することもできます。

string Output = Regex.Replace(Input, @"([ a-zA-Z0-9_]|^\s)", "");

ここで、Inputは、文字を置き換えるために必要な文字列です。


2

Andrzej Doyleの答えの例に従って、私はより良い解決策を使用することだと思いますorg.apache.commons.lang3.StringUtils.stripAccents()

package bla.bla.utility;

import org.apache.commons.lang3.StringUtils;

public class UriUtility {
    public static String normalizeUri(String s) {
        String r = StringUtils.stripAccents(s);
        r = r.replace(" ", "_");
        r = r.replaceAll("[^\\.A-Za-z0-9_]", "");
        return r;
    }
}


0

ウィンドウPCのキャラクターマップツールからそのジャンクキャラクターのUnicodeを取得し、著作権記号に\ u例\ u00a9を追加できます。これで、その文字列を特定のジャンク文字で使用できます。ジャンク文字を削除せずに、適切なユニコードに置き換えます。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.