Java:由regex拆分的字符串只能获得整数

时间:2014-03-04 11:41:03

标签: java string split

我有一个字符串:[1, 2, 3, 4]。我只需要获得整数1 2 3 4

我尝试了以下分割:

str.split(",");
str.split("\\D\\s");

两个分裂返回四个元素:[1 2 3 4],但我不需要这些括号[ ]。 split regexp有什么问题?

更新

我不得不提到每个号码都被[ ]包裹的情况。

8 个答案:

答案 0 :(得分:11)

您可以先尝试过滤掉不需要的元素,然后再拆分:

String filtered = str.replaceAll("[^0-9,]","");
String[] numbers = filtered.split(",");

答案 1 :(得分:2)

您的代码完全按照您的说法执行操作:使用“,”作为分隔符拆分字符串:

"[1, 2, 3]" => "[1" , " 2", " 3]"

在使用split()之前,你可以按下字符串形状 - 删除空格和方括号。然而,更直接的正则表达式方法是使用Matcher扫描输入字符串:

    Pattern pattern = Pattern.compile("(\\d+)\\D+");
    ArrayList<String> list = new ArrayList<String>();
    Matcher matcher = pattern.matcher(input);
    while(matcher.find()) {
        list.add(matcher.group(1));
    }
    // if you really need an array
    String[] array = list.toArray(new String[0]);

此模式(\d+)\D+匹配一个或多个数字,后跟一个或多个非数字,并捕获组中的数字,您可以使用matcher.group(1)进行访问。它非常宽松地匹配您的输入;如果您愿意,可以使其更具体(以便拒绝其他形式的输入)。

答案 2 :(得分:1)

实际上split函数返回一个字符串数组,这就是你得到这个[]的原因。

使用replace方法执行此操作。

答案 3 :(得分:1)

您为split方法提供的正则表达式用于确定每个拆分的索引。

处理您案例的最干净的解决方案是使用Pattern.compile创建类似[0-9]+的模式,然后使用匹配器查找源字符串中的每个匹配项。

代码示例:

Pattern pattern = Pattern.compile("[0-9]+");
Matcher matcher = pattern.matcher(yourString);

while(matcher.find()) {
    System.out.println(matcher.group());
}

这会在yourString中打印出每个连续的数字。


附录:如果经常使用这段代码,请创建一个静态变量,在加载类时已经编译了Pattern,因为模式编译很昂贵。喜欢:private static final Pattern NUMBER_PATTERN = Pattern.compile("[0-9]+");

答案 4 :(得分:0)

String s=s.substring(1,s.length()-1);
String s1[]=s.split(",");

这将为您提供预期的字符串。

答案 5 :(得分:0)

尝试对代码执行此操作:

yourString = yourString.replace ( /[^\d.]/g, '' );

答案 6 :(得分:0)

替换方括号[ ]然后拆分

str.replaceAll("\\[", "").replaceAll("\\]", "").split(",");

答案 7 :(得分:0)

试试这个:

String str = "[1, 2, 3, 4]";
String num = str.replaceAll( "[^\\d,]", "" );

您将获得String 1,2,3,4

然后使用String[] allNums = num.split(",");

编辑:这也适用于输入String str = "[[1], [2], [3], [4]]";