1

我想从一个看起来像这样的字符串中获取一些值:

"ID=1923\nZ=19\nX=123\nY=102\r\nID=133\nZ=11\nX=14\nY=12r\nID=1313\nZ=121\nX=134\nY=19"

我需要 ID、Z、X、Y。有谁知道解决这个问题的方法。(我知道它可以用 StringTokenizer 完成,但问题是如何做。)

我只需要 ID、Z、Y、X 的值

整数 ID = 1923;诠释 Z = 19; 诠释 X = 123; 整数 Y = 102;

我不想有像 String = "ID=1923"; 这样的东西。

干杯,

4

4 回答 4

1

如果元素(ID、Z、X、Y)的顺序始终相同,则可以使用正则表达式:

保存值的类(为简洁起见,字段是公开的):

public class Something {
    public int id;
    public int z;
    public int x;
    public int y;

    @Override
    public String toString() {
        return "ID=" + id + " x=" + x + " y=" + y + " z=" + z;
    }
}

那么,带有正则表达式的方法可以有以下内容:

    final String input ="ID=1923\nZ=19\nX=123\nY=102\r\nID=133\nZ=11\nX=14\nY=12r\nID=1313\nZ=121\nX=134\nY=19";

    final String regex = ".*?ID=(\\d+).*?Z=(\\d+).*?X=(\\d+).*?Y=(\\d+)";

    final Pattern pattern = Pattern.compile(regex, Pattern.DOTALL);

    final Matcher matcher = pattern.matcher(input);

    final List<Something> somethings = new ArrayList<>();

    while (matcher.find()) {
        final Something something = new Something();
        something.id = Integer.parseInt(matcher.group(1));
        something.z = Integer.parseInt(matcher.group(2));
        something.x = Integer.parseInt(matcher.group(3));
        something.y = Integer.parseInt(matcher.group(4));

        somethings.add(something);
    }

    for (final Something something : somethings) {
        System.out.println(something);
    }

产生以下输出:

ID=1923 x=123 y=102 z=19
ID=133 x=14 y=12 z=11
ID=1313 x=134 y=19 z=121
于 2013-08-14T11:44:50.563 回答
1

怎么样:

String str = "ID=1923\nZ=19\nX=123\nY=102\r\nID=133\nZ=11\nX=14\nY=12r\nID=1313\nZ=121\nX=134\nY=19";
StringTokenizer st = new StringTokenizer(str, "\n");
while(st.hasMoreElements()) {
    System.out.println(st.nextElement());
}

或者,如果您需要以某种方式存储它们:

    String str = "ID=1923\nZ=19\nX=123\nY=102\r\nID=133\nZ=11\nX=14\nY=12r\nID=1313\nZ=121\nX=134\nY=19";
    StringTokenizer st = new StringTokenizer(str, "\n");

    List<String> idList = new ArrayList<String>();
    List<String> zList = new ArrayList<String>();
    List<String> xList = new ArrayList<String>();
    List<String> yList = new ArrayList<String>();

    while(st.hasMoreElements()) {
        String tempKey = (String)st.nextElement();
        String tempValue = tempKey.split("=")[1];
        if(tempKey.startsWith("ID")) {
            idList.add(tempValue);
        } else if(tempKey.startsWith("Z")) {
            zList.add(tempValue);
        } else if(tempKey.startsWith("Y")) {
            yList.add(tempValue);
        } else if(tempKey.startsWith("X")) {
            xList.add(tempValue);
        }
    }
    for (List<String> list : new ArrayList<List>(Arrays.asList(idList, zList, xList, yList))) {
        for (String id : list) {
            System.out.println(id);
        }
    }
于 2013-08-14T10:24:39.837 回答
0

indexOf("ID")- 开始位置

from(startPosition,indexOf("\n");- 结果。

重新检查一个位置并找到下一个案例。

I dont love recursion :) but in that case i will be used here.

于 2013-08-14T10:24:17.040 回答
0
String value = "ID=1923\nZ=19\nX=123\nY=102\r\nID=133\nZ=11\nX=14\nY=12r\nID=1313\nZ=121\nX=134\nY=19";

String[] values = value.split("\n"); \\ This gives ID=1923, Z=19, etc

for(String str : values){
    System.out.println(str.substring(0, str.indexOf('=')) + "\t" + str.substring(str.indexOf('=') + 1));       
}
于 2013-08-14T10:24:33.703 回答