如何检查字符不是字母或数字的字符串

时间:2014-01-29 19:49:55

标签: java

我正在尝试修剪a-Z 0-9之前的任何字符

但这不起作用

我需要>&%Hell$o成为Hell$o

private String removeStartingCharacters(String linkName) {
    if(linkName.startsWith("^[a-Z0-9]")){
        try {
            linkName = linkName.substring(1);               
        } catch (Exception e) {
            e.printStackTrace();
            return linkName;
        }
        return removeStartingCharacters(linkName);
    }else 
        return linkName;
}

5 个答案:

答案 0 :(得分:1)

您可以使用Character.isLetterOrDigit(char)

private String removeStartingCharacters(String linkName) {
    if (!Character.isLetterOrDigit(linkName.cahrAt(0)){
        try {
            linkName = linkName.substring(1);               
        } catch (Exception e) {
            e.printStackTrace();
            return linkName;
        }
        return removeStartingCharacters(linkName);
    } else 
        return linkName;
}

答案 1 :(得分:1)

我认为这就是你所追求的:

public class Test {
    public static void main(String[] args) {
        System.out.println(trimStart("&%Hell$o"));
        // [ and ] are between A-Z and a-z...
        System.out.println(trimStart("[]Hell$o"));
        System.out.println(trimStart("Hell$o"));
    }

    private static String trimStart(String input) {
        // The initial ^ matches only at the start of the string
        // The [^A-Za-z0-9] matches all characters *except* A-Z, a-z, 0-9
        // The + matches at least one character. (The output is the same
        // as using * in this case, as if there's nothing to replace it would
        // just replace the empty string with itself...)
        return input.replaceAll("^[^A-Za-z0-9]+", "");
    }
}

(在所有情况下,输出显示Hell$o。)

replaceAll的单次调用比您目前所做的要简单得多。

编辑:replaceFirst也可以,但仍然需要^开头,以确保它只替换字符串开头的字符。 replaceFirst中的“first”仅表示模式的第一次出现,而不是输入字符串中的第一个字符。使用您认为更具可读性的方法。

请注意,此允许a-z,A-Z和0-9作为起始字符:

  • 不允许Z和a之间的字符(例如[]
  • 不允许使用非ASCII字母或数字

如果这些规则与您的实际要求不符,您需要调整正则表达式

答案 2 :(得分:1)

基于Pattern的解决方案就是这样:

public static String removeStartingNonAlnums(String input) {
    // null check
    if (input == null) {
        return null;
    }
    // empty check
    else if (input.isEmpty()) {
        return "";
    }
    // pattern check
    else {
                              // | start of input
                              // | | negation of alpha-numeric category
                              // | |        | zero/more greedy quantifier
                              // | |        |   | replaces with empty
        return input.replaceAll("^\\P{Alnum}*", "");
    }

}

...其中">&%Hell$o"变为Hell$o

答案 3 :(得分:1)

str.replaceFirst("^[^a-zA-Z0-9]+", "");

答案 4 :(得分:0)

您只需使用replaceFirst替换[a-zA-Z_0-9]中未包含的字符,重新添加下划线即可删除该字符

input = input.replaceFirst("^[\\W_]+", "");