1

文字列を解析しようとしていますが、単純なコンマ解析などではないため、解析方法がわかりません。私が持っている文字列はこれに似ています:

String s = "[\"142.5,106.1\",\"142.5,112.1\",\"143.5,119.1\",\"144.5,128.1\",\"146.5,138.1\",\"147.5,148.1\"]";

文字列はjsonarrayから来ているので、なぜフォーマットが何であるかですが、私の目標はこれを解析してリストにすることです。したがって、142.5,106.1 は 1 点の x、y 座標などです。誰かが私を正しい方向に向けてくれますか? ありがとう。

4

6 に答える 6

2

StringTokenizer( "\" [、] ")を使用して、一度に2つの値(x、y、x、yなど)を読み取ることができます。

于 2012-04-13T18:33:03.067 に答える
1

あなたのことをよく理解しているかどうかはわかりませんが、見逃しているのは特別なキャラクターが逃げているだけだと思います。内部の二重引用符は、この\"のように円記号を使用します。

于 2012-04-13T18:33:55.533 に答える
1

これが私が思いついたものです。ブラケットをクリーンアップできれば、これがより速くなるはずです。おそらくもっと良い方法と他の方法がありますが、分割を使用してすべてのコンマを区切ります。したがって、リストにはそれらが順番に含まれています。つまり、list.get[0] と list.get[1] はペアです。

public static void main(String[] args){

    String s ="[\"142.5,106.1\",\"142.5,112.1\",\"143.5,119.1\",\"144.5,128.1\",\"146.5,138.1\",\"147.5,148.1\"]";
    String[] set= s.split(",");
    ArrayList<Double> list = new ArrayList<Double>();
    for(int i=0; i<set.length;i++){
        System.out.println(set[i]);
        list.add(Double.parseDouble(set[i].replaceAll("\\[", "").replaceAll("\"", "").replaceAll("\\]", "")));

    }
    for(int i=0;i<list.size();i++){
        System.out.println(list.get(i));
    }
    }
于 2012-04-13T18:49:49.833 に答える
0

これはあなたが求めているものではないことはわかっていますが、あなたが投稿した質問にすぐに答えるのではなく、あなたのタスクの正しいアプローチについて話し合いたいと思います.

ペアのjson配列を受け取った場合、そのシリアル化されたバージョンはそのようになると想定できます(文字列があなたが共有するものとはまったく似ていないことがはっきりしているため、ここで推測しています):

 "[[123, 234], [234, 456],...]"

この文字列を Java オブジェクトに解析するために非常に有名なGson ライブラリを使用すると、次のように簡単に実行できます。

    String json = "[[123.3, 234.5], [234.1, 456.5]]";
    Gson gson = new Gson();
    double [][] points = gson.fromJson(json, double[][].class);
    System.out.println(points[1][1]);

これは次のように出力456.5されます。期待どおりであり、json を自分で解析する必要はありません。

于 2012-04-13T18:41:05.293 に答える
0

常に同じ形式の場合、このように変換できます。

 String s ="[\"142.5,106.1\",\"142.5,112.1\"]";

            s=s.replace("[", "");
            s=s.replace("]", "");

            String[] ss=s.split("\"");
        List list=   Arrays.asList(ss);

list.get(0);=142.5,106.1 // so on .....

私はあなたが何を必要としていたかを理解しています。

于 2012-04-13T18:45:03.900 に答える
0

シンプルだが効率の悪い解決策は、次のような String メソッドを使用することです。

    //(being s your example's String)
    String[] coordinates = s.substring(2, s.length() - 2).split("\",\"");
    //the two at the beginning and end of the substring is to eliminate braces ([]) and the first and last quotes (")

座標文字列配列には、120.1、140.4 などのデータが含まれます。

于 2012-04-13T18:58:18.873 に答える