我有一个字符串:[1, 2, 3, 4]
。我只需要获得整数1 2 3 4
。
我尝试了以下分割:
str.split(",");
str.split("\\D\\s");
两个分裂返回四个元素:[1 2 3 4],但我不需要这些括号[ ]
。 split regexp有什么问题?
更新
我不得不提到每个号码都被[ ]
包裹的情况。
答案 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]]";