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

编辑:这将不支持正则表达式。由于您要擦除的不仅仅是单个字符,我建议您调整此代码以允许数组needles或(丑陋的方法)循环通过不允许的字符并重复调用该函数。

于 2013-11-13T21:03:26.180 回答
1

您可以使用Apache Software Foundation 的jakarta

Jakarta Regexp 是一个 100% 纯 Java 正则表达式包

它没有维护,但最后一个版本不是那么旧(2011 年)。

文档:http: //jakarta.apache.org/regexp/

对于 replaceAll,您可以将subst其与REPLACE_ALL标志一起使用。

PS:链接失效,这里有镜像下载lib

于 2013-11-13T21:03:01.660 回答
1

假设您只需要字母和其他任何内容都可以替换为空白。Character 也得到了 isDigit 方法。如果有帮助,请参阅http://docs.oracle.com/javase/1.3/docs/api/java/lang/Character.html 。

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());
}
于 2013-11-13T21:20:23.207 回答