读取文件时如何返回正数和负数

时间:2018-08-01 14:19:51

标签: java regex

我正在编写一个代码,该代码逐行读取文件并仅返回以下几行,例如:

  

int int0 =(-953);
      int int1 =(-411);
      int int2 = 5471;
      int int3 = 823;

之后,我只想返回正数和负数。为此,我编写了以下内容:

String str = line.replaceAll("\\D+","");
System.out.println(str);

运行此代码的结果是:

  

0953
      1411
      25471
      3823

我寻求的输出是:

  

-953
      -411
      5471
      823

我该怎么做?

3 个答案:

答案 0 :(得分:8)

如果要捕获一行中的最后一位数字(可以选择在前面加上减号),则可以使用捕获组来完成它,如下所示:

Pattern p = Pattern.compile(".*?(-?\\d+)\\D*$");
String line = "int int0 = (-953);";
Matcher m = p.matcher(line);
if (m.matches()) {
    System.out.println(m.group(1));
}

结果:

-953

答案 1 :(得分:1)

怎么样?

由于您的情况,每个数字都将在=之后,而我在这里想要做的就是删除所有其他内容,就像您在此部分中曾经尝试过的那样(在=之后)。

s = s.split("=")[1].replaceAll("[^-0-9]", "");

使用以下命令本地测试您的输入:

public static void main(String... args) {
    String[] ss = {"int int0 = (-953);", "int int1 = (-411);", "int int2 = 5471;", "int int3 = 823;"};
    for (String s : ss) {
        s = s.split("=")[1].replaceAll("[^-0-9]", "");
        System.out.println(s);
    }
}

输出将是:

-953
-411
5471
823

答案 2 :(得分:1)

使用此方法:([-+]?)\ d +

  • [-+]?将匹配-或+和?表示是否存在
  • \ d + 任何数字0-9,而+表示1次或多次