我正在使用一些非常古老的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
之前完成此操作的?
答案 0 :(得分: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来测试它。
答案 1 :(得分: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
或(丑陋的方法)数组循环遍历不允许的字符并重复调用该函数。 / p>
答案 2 :(得分:1)
您可以使用Apache Software Foundation的jakarta。
Jakarta Regexp是一个100%纯Java正则表达式包
它没有维护,但最后一个版本不是那么老(2011)。
文档:http://jakarta.apache.org/regexp/
对于replaceAll,您可以将subst
与REPLACE_ALL
标记一起使用。
PS:链接已死,here a mirror to download the lib。
答案 3 :(得分:1)
假设您只需要使用字母和其他任何内容替换为空白。 人物也得到了数字方法。如果有帮助,请参阅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());
}