例如,如果我有(->表示返回):
aBc123afa5 -> aBc
168dgFF9g -> 168
1GGGGG -> 1我如何在Java中做到这一点?我想这与regex有关,但我对regex并不擅长,所以我不太确定如何实现它(我可以考虑一下,但我有一种感觉,它会有5-10行长,我认为这可以用一条线来完成)。
谢谢
发布于 2014-06-20 13:04:52
String myString = "aBc123afa5";
String extracted = myString.replaceAll("^([A-Za-z]+|\\d+).*$", "$1");查看regex演示和实时代码演示!
为了提高效率,使用Matcher.group()并重用Pattern:
// Class
private static final Pattern pattern = Pattern.compile("^([A-Za-z]+|\\d+).*$");
// Your method
{
String myString = "aBc123afa5";
Matcher matcher = pattern.matcher(myString);
if(matcher.matches())
System.out.println(matcher.group(1));
}注意:/^([A-Za-z]+|\d+).*$和/^([A-Za-z]+|\d+)/都有相似的效率。在regex101上,您可以比较matcher调试日志来找出这一点。
发布于 2014-06-20 13:09:15
在不使用regex的情况下,您可以这样做:
String string = "168dgFF9g";
String chunk = "" + string.charAt(0);
boolean searchDigit = Character.isDigit(string.charAt(0));
for (int i = 1; i < string.length(); i++) {
boolean isDigit = Character.isDigit(string.charAt(i));
if (isDigit == searchDigit) {
chunk += string.charAt(i);
} else {
break;
}
}
System.out.println(chunk);发布于 2014-06-20 13:09:31
public static String prefix(String s) {
return s.replaceFirst("^(\\d+|\\pL+|).*$", "$1");
}哪里
\\d = digit
\\pL = letter
postfix + = one or more
| = or
^ = begin of string
$ = end of string
$1 = first group `( ... )`一个空的替代方案(最后一个|)确保(...)总是匹配的,并且总是会发生替换。否则,将返回原始字符串。
https://stackoverflow.com/questions/24327888
复制相似问题