Java - String.replaceAll返回不同的结果

时间:2016-10-25 02:31:18

标签: java android regex

这就是我想要的,有一个像CHAR_27[19;50H这样的字符串,我想分别从内部获取数字。

// CHAR_27 = Character.toString( (char)27 );
// Or "\u001B"
String escapeString = "CHAR_27[19;50H";
String coord = escapeString.replaceAll("[^0-9;]", "");
List<String> coords = Splitter.on(";").splitToList(coord);

if (coords.size() != 2) continue;

rowIndex = Integer.parseInt(coords.get(0)) - 1;
colIndex = Integer.parseInt(coords.get(1)) - 1;

但有时它会抛出NumberFormatException, invalid integer CHAR_27[19

大多数情况下都可以。

我的正则表达式有问题吗?

或者我应该使用StringUtils.removePattern()来获得更一致的结果吗?

我收到了诺基亚N1和GT-810(劳力士)的这份报告。它们都是Android 5.1。

我正在使用Android API 24.

1 个答案:

答案 0 :(得分:0)

您发布的代码不会引起上述异常(如果输入是单行字符串)。

但是,您的代码包含一些漏洞:

  • 可以通过表达式
  • 加入单独的数字
  • 可以创建空字符串

我建议使用:

String escapeString = "CHAR_27[19;50H";
String[] coords = escapeString.split("[^0-9]+");

if (coords.length != 2) continue;

rowIndex = Integer.parseInt(coords[0]) - 1;
colIndex = Integer.parseInt(coords[1]) - 1;