我有一个字符串,例如
12abcdef
1ab2cdef
abcdef
字符串可以以数字开头或不以数字开头,但 我需要将其分为两部分,第一个数字(如果有)和第二个字符串
我需要将字符串拆分为[12,abcdef] [1,ab2cdef] [abcdef]
如何在Java中执行此操作?我应该在Java的spilit中使用哪个正则表达式?
答案 0 :(得分:0)
使用带有捕获组的正则表达式和Matcher
,如下所示:
String s = "12abcdef";
Pattern p = Pattern.compile("([0-9]*)([^0-9]*)");
Matcher m = p.matcher(s);
if (m.matches()){
System.out.println("Digits = \"" + m.group(1) + "\"");
System.out.println("Non-digits = \"" + m.group(2) + "\"");
} else
System.out.println("No match");
答案 1 :(得分:0)
有很多解决方法,拆分是一个很好的起点。这是一个处理您的用户案例的工作示例。
public class Main {
public static void main(String[] args) throws IOException, InterruptedException {
System.out.println(splitString("12abcdef"));
System.out.println(splitString("1ab2cdef"));
System.out.println(splitString("abcdef"));
}
private static String splitString(String string) {
String[] split = string.split("[a-z]");
return split.length >= 1 ? split[0] : "";
}
}
这将返回数字,如果没有数字,则返回空白字符串。
答案 2 :(得分:0)
这是您使用Java regex
时真正想要的:
public class SplitNumStr {
private final static Pattern NUM_STR_PATTERN = Pattern.compile("(\\d+)(\\w+)");
public static void main(String... args) {
List<String> list = new ArrayList<>(Arrays.asList("12absc", "2bbds", "abc"));
for (String s : list) {
System.out.println(Arrays.toString(split(s)));
}
}
private static String[] split(String numStr) {
Matcher matcher = NUM_STR_PATTERN.matcher(numStr);
if (matcher.find()) {
return new String[] {matcher.group(1), matcher.group(2)};
} else return new String[] { numStr };
}
}
输出:
[12, absc]
[2, bbds]
[abc]
答案 3 :(得分:-1)
只需计算连续数字并使用String.substring
。
static String[] test(String s) {
int e = 0;
while (e < s.length()
&& '0' <= s.charAt(e)
&& s.charAt(e) <= '9')
e++;
return e == 0 || e == s.length() ?
new String[] { s } :
new String[] { s.substring(0, e), s.substring(e) };
}