使用字符串分隔符来解析整数

时间:2015-03-05 19:55:14

标签: java regex string

我以(x,y)的形式输入,其中x和y是整数。例如,(10,10)。我需要从输入中解析出整数。这是我的代码:

String dilims = "(,) ";
String[] xy = s.split(dilims);

使用此代码,xy中的标记为"(10"和" 10)"而不是" 10"," 10&# 34 ;.为什么会这样","并且空格被识别为分隔符,但是"("和")"不是?请指教。

谢谢你, M

4 个答案:

答案 0 :(得分:3)

split不是你想要使用的(至少不是这种形式的输入)因为因为(在开始它会在结果数组中创建空字符串,就像{{1}一样}创建"foo".split("f")

无论如何,因为["", "oo"]使用正则表达式作为参数,代码为

split

未获得String[] xy = "(10, 10)".split("(,) "); 10,但10 (10因为10)代表"(,) ",其中放置了", "group。所以你只是在,分裂。

如果你想分开", "(),,你需要逃离(使用代表OR运算符的),因此你的正则表达式看起来像|,但正如已经提到的那样,这是个坏主意。

如果您的数据始终采用"\\(|\\)|,| "格式,请考虑首先删除(xxx, yyy)((例如使用)),然后在substring上拆分

", "

您也可以使用Scanner,如果它在开始时找到分隔符,则会忽略第一个潜在结果为空字符串的事实,因此对于String dilims = ", "; String[] xy = s.substring(1,s.length()-1).split(dilims); 和分隔符foo等数据,第一个结果将是{{1} }。

Delimiter也是使用正则表达式编写的。我们可以轻松地创建一个代表f oo ( )(空格)的character class帮助。它看起来像,(在字符类内部而[(), ]失去了它的特殊含义,所以我们不需要逃避它。但是因为可以有一个接一个的分隔符(())并且我们不需要在它们之间处理空字符串作为结果之一我们需要让分隔符接受一个分隔符或更多连续字符。我们可以使用, quantifier来完成此操作。

所以你的代码看起来像

space

答案 1 :(得分:3)

您可以使用正则表达式捕获组:

    String text = "(10, 10)";

    String patternString = "([-]*[0-9]+)";

    Pattern pattern = Pattern.compile(patternString);
    Matcher matcher = pattern.matcher(text);

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

答案 2 :(得分:2)

如果你真的只获得(10,10)作为输入,那么你可以尝试以下选项:

String s ="(10,10)"; //Input String
String dilims = ","; 
s = s.replace("(", "").replace(")", "").replace(" ", ""); //replacing all unwanted
String[] xy = s.split(dilims);

O / P: -

10
10

答案 3 :(得分:1)

使用此分割按非数字字符分割:

String[] xy = s.split("[^\\d-]+");