如何在java中使用regex将字符串分成两部分?

wz1wpwve  于 2021-06-30  发布在  Java
关注(0)|答案(3)|浏览(340)
String strArray="135(i),15a,14(g)(q)12,67dd(),kk,159"; //splited by ','

在第一次出现字母数字值/字符后除以字符串
预期产量:

original         expected o/p
    15a              s1=15   s2=a
    67dd()           s1=67   s2=dd()
    kk               s1=""   s2=kk
    159              s1=159  s2=""

请帮帮我。。。。。。。。。。。。。。。。

cdmah0mi

cdmah0mi1#

使用 java.util.regex.Pattern 以及 java.util.regex.Matcher ```
String strArray="135(i),15a,14(g)(q)12,67dd(),kk,159";
String arr[] = strArray.split(",");
for (String s : arr) {
Matcher m = Pattern.compile("([0-9])([^0-9])").matcher(s);
System.out.println("String in = " + s);
if(m.matches()){
System.out.println(" s1: " + m.group(1));
System.out.println(" s2: " + m.group(2));
} else {
System.out.println(" unmatched");
}
}

输出:

String in = 135(i)
s1: 135
s2: (i)
String in = 15a
s1: 15
s2: a
String in = 14(g)(q)12
unmatched
String in = 67dd()
s1: 67
s2: dd()
String in = kk
s1:
s2: kk
String in = 159
s1: 159
s2:

注意如何 `'14(g)(q)12'` 不匹配。不清楚在这个示例中op所需的输出是什么(或者示例输入字符串的这部分是否缺少逗号)。
qacovj5a

qacovj5a2#

您可以使用pattern/matcher的分组方法:

String strArray = "135(i),15a,14(g)(q)12,67dd(),kk,159";//splited by ','
Pattern pattern = Pattern.compile("(?<digits>\\d*)(?<chars>[^,]*)");

Matcher matcher = pattern.matcher(strArray);
while (matcher.find()) {
    if (!matcher.group().isEmpty()) //omit empty groups
        System.out.println(matcher.group() + " : " + matcher.group("digits") + " - " + matcher.group("chars"));
}

方法组(字符串名称)提供模式括号中的字符串,其中包含匹配中的特定名称(这里是“digits”或“chars”)。方法组(inti)将给出匹配中模式的第i个圆括号中的字符串。
请参见上的oracle教程http://docs.oracle.com/javase/tutorial/essential/regex/ 有关在java中使用regex的更多示例。

mi7gmzs6

mi7gmzs63#

你可以使用 Pattern 和一个 Matcher 查找字母的第一个索引,前面有一个数字,并在该位置拆分。
代码

public static void main(String[] args) throws ParseException {
    String[] inputs = { "15a", "67dd()", "kk", "159" };
    for (String input : inputs) {
        Pattern p = Pattern.compile("(?<=[0-9])[a-zA-Z]");
        Matcher m = p.matcher(input);

        System.out.println("Input: " + input);
        if (m.find()) {
            int splitIndex = m.end();
            // System.out.println(splitIndex);
            System.out.println("1.\t"+input.substring(0, splitIndex - 1));
            System.out.println("2.\t"+input.substring(splitIndex - 1));
        } else {
            System.out.println("1.");
            System.out.println("2.\t"+input);
        }
    }
}

输出

Input: 15a
1.  15
2.  a
Input: 67dd()
1.  67
2.  dd()
Input: kk
1.  
2.  kk
Input: 159
1.
2.  159

相关问题