我有数千行文本文件,类似于以下内容:

0000:0010:1111:3000
0003:0010:1113:3000
0004:0010:1188:3009

依此类推,将数据解析为整数。

最明显的方法是使用Integer.parseInt(String)。但是,它需要一个String,并且由于String是不可变的,因此我们不得不一次又一次地分配String才将它们转换为int。

它要在移动设备中运行,在该设备中分配字符串并让GC运行需要花费大量精力。

我希望能够拥有一种类似于parseInt(char[] chars, int offset, int length)的方法,这样我们就不需要进行分配。那可能吗?标准Java / JDK / Android库中是否有任何可以实现的实现?

最佳答案

您可以使用 Scanner 并调用 useDelimiter(String) 设置分隔符。就像是,

String str = "0000:0010:1111:3000\n" + "0003:0010:1113:3000\n"
        + "0004:0010:1188:3009";
Scanner sc = new Scanner(str);
sc.useDelimiter("[:|\\s]+"); // <-- one or more colon or whitespace
while (sc.hasNextInt()) {
    System.out.printf("%04d%n", sc.nextInt()); // <-- format to 4 digits with
                                               //     leading zeros.
}

08-26 13:48