0

AR ("AR_speaker") でマーカー位置を返すと主張し、ネイティブ コード (jni) を使用する Android のプログラムを見つけました。私の問題はmarkerInfoクラスにあります。この正規表現の意味がわかりません: ^id=(\\d+):name=(.+):pos\\[0\\]=([\\d.]+):pos\\[1\\]=([\\d.]+)$

public class MarkerInfo implements Serializable {
  private static final long serialVersionUID = 1L;
  private static final Pattern REGEX = Pattern.compile("^id=(\\d+):name=(.+):pos\\[0\\]=([\\d.]+):pos\\[1\\]=([\\d.]+)$");
  private Integer id;
  private String fileName;
  private Float[] pos = new Float[3];

  public MarkerInfo(String markerStr) {
    Matcher m = REGEX.matcher(markerStr);
    if (!m.find()) throw new RuntimeException("not markerInfo string : " + markerStr);
    id = Integer.parseInt(m.group(1));
    fileName = m.group(2);
    pos[0] = Float.parseFloat(m.group(3));
    pos[1] = Float.parseFloat(m.group(4));
    //pos[2]=Float.parseFloat(m.group(5));
  }

  public Integer getId() {
    return id;
  }

  public String getFileName() {
    return fileName;
  }

  public Float[] getPos() {
    return pos;
  }
}

私の他の質問は、これらのデータはどこに保存されているのですか? AR で使用されるパターンにはこれらのデータがありますか? どのファイルで?(たとえば、marker.patt?)

4

1 に答える 1

1

正規表現では、^ は「式の開始または拒否文字ですが、この場合は式の開始」を意味し、これは式がmarkerStrで探しているものであり、文字「id =」の後に1つ以上の小数点が続くものを探しています文字の後に ":name=" が続き、任意の種類の 1 つ以上の文字 (.+ の意味) が続き、その後に ":pos[0]=" が続き、その後に 1 つ以上の 10 進文字またはドット ([\ d.]+ 意味) の後に "pos[1]=" が続き、その後に 1 つ以上の 10 進文字またはドット ([\d.]+ の意味) が続き、$ は正規表現の終わりを意味します...

とにかく、正規表現について読むことをお勧めします。正規表現は、文字列内のパターンを見つけるための非常に優れたツールです。この場合、それが彼らが使用しているものです...

よろしく!

于 2013-09-04T18:25:52.197 に答える