如何使用正则表达式从字符串中提取积分模式

时间:2013-09-10 04:15:24

标签: java regex string-formatting

我正在尝试创建一个mapLoader,它读取文件的文本文件(这里是一个例子)

[5,3,3,900,3,89,3,3,3,3,3,430,3,1439,3,65,3,320,3,3,3,3,3,3]
[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,21,3,3,3,3,3]
[5,3,3,900,3,89,3,3,3,3,3,430,3,1439,3,65,3,320,3,3,3,3,3,3]
[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,21,3,3,3,3,3]
[5,3,3,900,3,89,3,3,3,3,3,430,3,1439,3,65,3,320,3,3,3,3,3,3]
[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,21,3,3,3,3,3]
[5,3,3,900,3,89,3,3,3,3,3,430,3,1439,3,65,3,320,3,3,3,3,3,3]
[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,21,3,3,3,3,3]
[5,3,3,900,3,89,3,3,3,3,3,430,3,1439,3,65,3,320,3,3,3,3,3,3]
[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,21,3,3,3,3,3]
[5,3,3,900,3,89,3,3,3,3,3,430,3,1439,3,65,3,320,3,3,3,3,3,3]
[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,21,3,3,3,3,3]
[5,3,3,900,3,89,3,3,3,3,3,430,3,1439,3,65,3,320,3,3,3,3,3,3]
[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,21,3,3,3,3,3]
[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,21,3,3,3,3,3]

我将每一行加载到一个字符串[15]中,以便每个支架与其余部分隔离

我正在创建一个游戏,它是一个2D RPG(原来对吗?),上面的数字是关键整数,告诉我们在哪里放置一个平铺图像,以及哪个平铺图像用于 “mapTile BufferedImage []”

括号内的每个数字代表X轴上的1个单位,

每个括号集合在Y轴上组成1个单位。

我的网格尺寸为24x15

我的问题是我试图抓取数字,并将它们放入int [24] [15],但正如你所知,它可以在字符串长度上有所不同。可以在逗号之间使用的“数字”数量最多是“4”,因为我没有超过9999个mapTiles lol

如何创建提取该信息的正则表达式?

1 个答案:

答案 0 :(得分:3)

您的数据集太简单,无法使用正则表达式。您可以通过,逗号轻松分割线条来解析坐标。此外,如果您希望将坐标存储为int[15][24],则可能需要int[24][15]而不是int[rows][cols],因为您的网格为24x15

int[][] coords = new int[15][24];
BufferedReader br = new BufferedReader(new FileReader("/path/to/file"));

int row = 0;
String line = null;
while ((line = br.readLine()) != null) {
    // remove "[ ]" then split by ","
    String[] x = line.substring(1, line.length() - 1).split(",");
    // parse first 24 values only
    int cols = Math.min(x.length, 24);
    for (int col = 0; col < cols; col++) {
        coords[row][col] = Integer.parseInt(x[col]);
    }
    if (++row >= 15) break; // parse first 15 lines only
}

for (int i = 0; i < coords.length; i++) {
    for (int j = 0; j < coords[i].length; j++) {
        System.out.print(coords[i][j]);
    }
    System.out.println();
}

输出

53390038933333430314393653320333333
3333333333333333332133333
53390038933333430314393653320333333
3333333333333333332133333
53390038933333430314393653320333333
3333333333333333332133333
53390038933333430314393653320333333
3333333333333333332133333
53390038933333430314393653320333333
3333333333333333332133333
53390038933333430314393653320333333
3333333333333333332133333
53390038933333430314393653320333333
3333333333333333332133333
3333333333333333332133333