有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

安卓 Java字符串。replaceAll返回不同的结果

这是我想要的,有一个字符串,比如,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(劳力士)那里得到了这份报告。它们都是安卓5.1

我使用的是安卓API 24


共 (1) 个答案

  1. # 1 楼答案

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

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

    • 最初独立的数字可以通过表达式连接
    • 可以创建空字符串

    我建议使用:

    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;