拆分字符串取决于Java中的字符

时间:2019-04-24 14:21:49

标签: java regex string split

给出以下字符串(一行):

a_Type_of_Data 0.847481:611x569+446+1200,0.515323:597x762+448+1101,0.587354:597x558+488+1207

我想像这样拆分它[611,559,446,1200],[597,762,448,1101],[597,558,488,1207] 因此,基本上,无论数字之间的字符如何,都可以在“:”和“,”之间获得4个数字。

我已经尝试在“,”上分割字符串,但是我仍然遇到“:”前面的数字的问题。或像使用string result = Regex.Replace(input, @"[^\d]", "");

有没有办法用正则表达式来做到这一点? 预先感谢。

3 个答案:

答案 0 :(得分:1)

您可以首先使用此正则表达式\d+x\d+(?:\+\d+){2}来匹配用x+分隔的数字,然后使用[x+]拆分这些单独的字符串,这将为您提供另一个数组数字。

检查此Java代码,

String s = "a_Type_of_Data 0.847481:611x569+446+1200,0.515323:597x762+448+1101,0.587354:597x558+488+1207";
Pattern p = Pattern.compile("\\d+x\\d+(?:\\+\\d+){2}");
List<List<String>> list = new ArrayList<>();

Matcher m = p.matcher(s);
while(m.find()) {
    String[] data = m.group().split("[x+]");
    list.add(Arrays.asList(data));
}
list.forEach(System.out::print);

按预期方式打印输出,

[611, 569, 446, 1200][597, 762, 448, 1101][597, 558, 488, 1207]

答案 1 :(得分:0)

使用Matcher及其.find()方法:

package so21090424;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class PatternFinder {

    public static void main(String[] args) {
        final String input = "a_Type_of_Data 0.847481:611x569+446+1200,0.515323:597x762+448+1101,0.587354:597x558+488+1207";
        Pattern p = Pattern.compile(":([0-9]+)[x\\+]([0-9]+)[x\\+]([0-9]+)[x\\+]([0-9]+),?");
        Matcher m = p.matcher(input);
        while(m.find()) {
            System.out.println(m.group(1) + "\t" + m.group(2) + "\t" + m.group(3) + "\t" + m.group(4));
        }
    }

}

答案 2 :(得分:0)

cust = cust.where((cust.total_incoming_call == 0) & (cust.net_uses == 0))