3

Java. 1.3正確に言えば、私は何人かの本当に古い人と仕事をしています。

Stringアルファベット以外の文字 (句読点や数字など) を削除して、一部の入力をサニタイズしようとしています。

通常、私は次のようなことをします:

String.replaceAll("[^A-Za-z]", "");

しかし、.replaceAll()で紹介されましたJava 1.4!したがって、コンパイルされません。http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#replaceAll(java.lang.String, java.lang.String)

の前にこれをどのように達成しましたJava 1.4か?

4

4 に答える 4

4

おそらく、次のような単純なループを作成できます。

char[] origArr = str.toCharArray();
char[] destArr = new char[origArr.length];
int j = 0;
for (int i=0; i < origArr.length; i++) {
    char c = origArr[i];
    if ((c >= 65 && c <= 90) || (c >= 97 && c <= 122))
       destArr[j++] = c;
}

String dest = new String(destArr, 0, j);

申し訳ありませんが、テストするための JDK1.3 がありません。

于 2013-11-13T21:02:50.560 に答える
3

これが機能するかどうかを確認します。

public static String replaceAll(
    String haystack,              // String to search in
    String needle,                // Substring to find
    String replacement) {         // Substring to replace with

    int i = haystack.lastIndexOf( needle );
    if ( i != -1 ) {
        StringBuffer buffer = new StringBuffer( haystack );
        buffer.replace( i, i+needle.length(), replacement );
        while( (i=haystack.lastIndexOf(needle, i-1)) != -1 ) {
            buffer.replace( i, i+needle.length(), replacement );
        }
        haystack = buffer.toString();
    }

    return haystack;
}

編集:これは正規表現をサポートしません。1文字以上を消去しようとしているので、このコードを微調整しneedlesて、許可されていない文字の配列または(醜いメソッド)ループを許可し、関数を繰り返し呼び出すことをお勧めします。

于 2013-11-13T21:03:26.180 に答える
1

Apache Software Foundation によってJakartaを使用できます。

Jakarta Regexp は 100% Pure Java 正規表現パッケージです

メンテナンスされていませんが、最後のバージョンはそれほど古いものではありません (2011 年)。

ドキュメント: http://jakarta.apache.org/regexp/

replaceAll の場合はsubstREPLACE_ALLフラグで使用できます。

PS: リンクは無効です。ここでは lib をダウンロードするためのミラーです。

于 2013-11-13T21:03:01.660 に答える