5

文字列に少し問題があります。文字列は次のようになります。

A/46\-54.67/48\-6.94/52\2.41/54\0.00/38\-0.18/34\0.06/32\-27.22 (...)

UDP-Request からの応答です。リクエストは次のようでした: R/46/48(...)/32(...) 、つまり: #46,#48 の値を教えてください ... 答えは上に示されています。

標的:

最後に、リクエストごとに特定の値を String からの double としてのみ必要です。

私のお気に入りは、3 つ (または 2 つ) の引数を持つクラスです。最初の引数はそれ自身の文字列になり、2 番目の引数は文字列内の位置になります (値の後の 46\ のように)。また、必要に応じて、/ のように値の末尾に 3 分の 1 を付けます。値を含む配列を返します。

(私にとって本当の解決策ではありません:一度に値でしかリクエストできないので、答えは扱いやすくなります。問題、一度にもっと多くのUDPリクエストを行う必要がある場合。現在、リクエストは1秒に10回になります。最後に、それははるかに頻繁になります. そして、私は値で計算する必要があります)

問題:

文字列に一貫性がありません。返された値は異なる数字を持つことができ、署名されているかどうかにかかわらず可能です。Consistent is only:A/46\(digit for value 46)/48\(digit)/52\(digit)/54\(digit)/38\_/34\_/32\_ ご覧のとおり、値は "\ /" の間です。値を特定の位置でカットする「解決策」を得ました。しかし、桁が変わったときに失敗しました。

解決?

(はい、私は本物の Java Greenhorn です) 私の試行では、次のような配列が得られました。

A/46

-54.67/48

-6.94/52

2.41/54

0.00/38

-0.18/34

0.06/32

-27.22

そのため、Value の最後の部分を取得して double(array) に変換する方法がわかりません。

私の問題を生き生きと説明したことを願っています。

コメントと提案をありがとう。

4

5 に答える 5

1

これを試して

   String test="A/46\\-54.67/48\\-6.94/52\\2.41/54\\0.00/38\\-0.18/34\\0.06/32\\-27.22";
   String[] arr=test.split("\\\\");
   double[] dub=new double[arr.length];
   int k=0;
   for (String i:arr){
        if(i.split("/").length!=1) {
        dub[k]=Double.parseDouble(i.split("/")[1].trim());
        k++;
        }
   }
于 2013-07-09T16:00:44.333 に答える
0

を使用することをお勧めしますString.split()。これは、こちらの例のような比較的単純な文字列解析に便利な関数です。まず、「/」で UDP 応答を分割する必要があります。String結果の配列の最初と最後の s を無視しているようです。残りStringの s については、for ループを使用しString.split()て、'\' 文字で分割して、それぞれを順番に呼び出すことができます。

于 2013-07-09T16:17:52.303 に答える