0

私はJavaの初心者です

packet=090209153038020734.0090209153039020734.0 

このように、この文字列を分割して、2つの文字列のような配列に格納します。

1) 090209153038020734.0
2) 090209153039020734.0

私はこのようにしました:

String packetArray[] = packets.split(packets,Constants.SF); 

ここで、Constants.SF=0x01。

しかし、それは機能しません。

私を助けてください。

4

6 に答える 6

3

これらは明らかに固定幅のフィールドであるため、分割の使用についてはよく考えます。

ここで別の質問で以前にそれらを見たことがあります(実際にはいくつかあるので、これは宿題(または一般的なデータ収集デバイス:-)である可能性があると推測しています)。プロトコルは次のとおりです。

  • STX (0x01)。
  • 0x0f。
  • 日付 (YYMMDD または DDMMYY)。
  • 時刻 (HHMMSS)。
  • 0x02。
  • 値 (XXXXXX.X)。
  • 0x03。
  • 0x04。

そして、それらが固定幅であることを考えると、おそらく部分文字列を使用して情報を取得する必要があります。

于 2009-02-09T10:11:41.477 に答える
2
String packetArray[] = packets.split("\u0001");

動作するはずです。使用しています

public String[] split(String regex, int limit)

これは他のことをしている:それは最大でメンバー(この場合は1であるため、あなたが求めるものを得る)をsplit()含む配列を返すことを確実にします。limit

于 2009-02-09T14:05:57.733 に答える
2

String の JavaDoc はこちらで役立ちます: http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html

String パケットがあります。

String.indexOf(String)特別な部分文字列の位置を示します。「。」に興味があります。サイン。だからあなたは書く

int position = packet.indexOf(".")+1

末尾の小数点も必要なため、+1。20っぽい何かを返し、最初の数字の最後の位置になります。

次に、部分文字列を使用します

String first = packet.substring(0,position)「.0」までのすべてを提供します。「 String second = packet.substring(position-1).0」の後から文字列の最後までのすべてを提供する必要があります。

それらを明示的に配列に入れたい場合は、そこに置くことができます。全体としてのコード - いくつかの "off by one" - バグがあるかもしれません。

int position = packet.indexOf(".")+1 
String first = packet.substring(0,position)
String second = packet.substring(position-1)
String[] packetArray = new String[2];
packetArray[0] = first;
packetArray[1] = second;
于 2009-02-09T10:07:07.883 に答える
1

String.split() メソッドの Javadocs を読む必要があります...正規表現と制限を取る String.split() のバージョンを呼び出していますが、文字列自体を最初のパラメーターとして渡しています。本当に意味がありません。

Aaron Digulla が述べたように、他のバージョンを使用してください。

于 2009-02-09T16:54:28.577 に答える
0

分割をどのように行いたいかは言いません。固定長(文字数)に基づく場合もあれば、小数点以下1桁が必要な場合もあります。

前者の場合、packetArray = new String [] {packet.substring(0、20)、packet.substring(21)};を実行できます。

int dotIndex = packets.indexOf('.');
packetArray = new String[]{packet.substring(0, dotIndex+2), packet.substring(dotIndex+2)};

ソリューションは、正規表現と文字列を混同します。

于 2009-02-09T10:04:24.647 に答える
0

split は、ここに記載されているように正規表現を使用します。あなたのコードは、文字列全体を Constants.SF = 0x01 回一致させようとしているようですが、これはあまり意味がありません。ボックスの文字がわかっている場合は、{[^c]+cc} のようなものを使用できます。ここで、c はボックスの文字 (これは 0x01 だと思います) で、各「パケット」に一致します。

.net String.Split(...) 関数のように使用しようとしていると思いますか?

于 2009-02-09T10:06:34.280 に答える