SnakeDoc
SnakeDoc

Reputation: 14361

Java 1.3 String.replaceAll() , replacement

I'm working with some really old Java. 1.3 to be exact.

I'm attempting to sanitize some String input by removing non alphabet characters (punctuation and numbers, etc)

Normally I'd do something like:

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

However, .replaceAll() was introduced in Java 1.4! So it won't compile! http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#replaceAll(java.lang.String, java.lang.String)

How did we accomplish this prior to Java 1.4?

Upvotes: 3

Views: 3078

Answers (4)

user1769790
user1769790

Reputation: 1343

Assuming you need only alphabets and anything else to be replaced with blank. Character also got isDigit method. please refer to http://docs.oracle.com/javase/1.3/docs/api/java/lang/Character.html if it helps.

public static void main (String[] args)
{


String yourstring = "2323ABF!@CD24";
char[] check = yourstring.toCharArray();
StringBuffer str = new StringBuffer();
for(int i=0; i < check.length; i++){
    if(!Character.isLetter(check[i])){
       str.append("");
    }
    else{
        str.append(check[i]);
    }
}
System.out.println(str.toString());
}

Upvotes: 1

anubhava
anubhava

Reputation: 785058

Well probably you can write a simple loop like this:

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);

Sorry don't have JDK1.3 to test it out.

Upvotes: 4

Luke
Luke

Reputation: 419

See if this works:

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;
}

EDIT: This won't support regular expressions. As you're looking to erase more than just a single character, I would suggest you either tweak this code to allow an array of needles or (the ugly method) loop through the disallowed characters and repeatedly call the function.

Upvotes: 3

Fabien Sa
Fabien Sa

Reputation: 9470

You can use jakarta by the Apache Software Foundation.

Jakarta Regexp is a 100% Pure Java Regular Expression package

It's not maintained but the last version is not so old (2011).

The documentation: http://jakarta.apache.org/regexp/

For the replaceAll you can use subst with the REPLACE_ALL flag.

PS: The link is dead, here a mirror to download the lib.

Upvotes: 1

Related Questions