我正在尝试修剪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;
}
答案 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作为起始字符:
[
和]
)如果这些规则与您的实际要求不符,您需要调整正则表达式
答案 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_]+", "");