如何在java中使用正则表达式将字符串分成两部分?

时间:2015-01-15 10:26:01

标签: java

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=""

请帮助我................

3 个答案:

答案 0 :(得分:1)

您可以使用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"));
}

方法组(String name)为您提供在模式括号中找到的字符串,其中包含匹配项中的特定名称(此处为'digits'或'chars')。 方法组(int i)将为您提供在匹配中模式的第i个括号中找到的String。

有关在Java中使用正则表达式的更多示例,请参阅http://docs.oracle.com/javase/tutorial/essential/regex/上的Oracle教程。

答案 1 :(得分:0)

您可以使用PatternMatcher来查找以数字开头并在该位置拆分的字母的第一个索引。

<强>代码

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

答案 2 :(得分:0)

使用java.util.regex.Patternjava.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在这种情况下所需的输出是什么(或者如果示例输入字符串的这一部分缺少逗号)。