ソケットのInputStream
を介して14バイトのメッセージを受信しています。 これらは次のようになります。a55a0b051000000000223664300c
これらは特定のパターンを持っています。最初の2バイトは同期のためのもので、常に一定です。文字列で文字列を処理し、情報を抽出します。ネストされたif文を避けるには?
私はこのメッセージを確認する最良の方法をお探ししています。 最初の14バイトの長さを検証しなければならず、その後、最初の2バイトなど
これは今まで私のアプローチです:
public void handleMessage(String msg){
if(msg.length() == 14){
if(msg.substring(0, 1).equals("a5") && msg.substring(2, 3).equals("5a")){
//Determine tpye
if(msg.substring(4, 5).equals("0b")){
//Type = 05
if(msg.substring(6, 7).equals("05")){
if(msg.substring(8, 15).equals("0b")){
}
}
}
else if(msg.substring(4, 5).equals("6b")){
//Type = 05
if(msg.substring(6, 7).equals("05")){
if(msg.substring(8, 15).equals("0b")){
}
}
}
else if(msg.substring(4, 5).equals("4b")){
// ...
}
else if(msg.substring(4, 5).equals("ab")){
// ...
}
else System.out.println("Error: telegram type");
}else System.out.println("Error: Sync Bytes.");
}else System.out.println("Error: Telegram length.");
}
しかし、私はこれらすべてのネストされたIFSと冗長を避けたいですコードが付属しています。 より効率的な方法で文字列を処理する方法に関するアイデアはありますか? ありがとう!
その後、より読みやすいよう最初、私は文字列でそれを置かないと思いますが賢明かもしれない、バイトが[]も良いです(そしてあなた文字列を比較する代わりに 'if(input [0] == 0xA5 && input [1] == 0xA5)'を使うことができます –