-2

TTL 出力デバイスからシリアル データを取得し、それを JY-MCU ドングルに渡し、Android フォンで読み取ろうとしています。データは、4 桁の ASCII 10 進数として送信され、その後にキャリッジ リターンとライン フィードが続きます。

BluetoothChat を使用すると、送信された番号は電話で正しく表示されますが、アプリ内で番号を操作し、操作の結果を画面に送信したいです。

データを送信するのではなく、読み取るだけで済みます。

のコードを見て、MESSAGE_READ で作成された文字列を値に変換し、この整数を操作して文字列に戻し、この結果をディスプレイに送信BluetoothChat.javaする必要があると思いました。Integerこれはこれについて正しい方法ですか?Integer.parseInt()and ()を使用してみString.valueOfましたが、成功しませんでした。

私がやろうとしていることを示すコードの簡単なセクションを投稿できますが、誰かが最初に指摘できる簡単な間違いを犯している可能性があると思いました。

提案をありがとうデビッド

 byte[] readBuf = (byte[]) msg.obj;
 // construct a string from the valid bytes in the buffer
 String readMessage = new String(readBuf,0, msg.arg1);
 //remove any leading zero's
 String readMessages = readMessage.replaceAll("^0*", "");
 //remove any leading zero's
 // Declare Integer
 int newMessage;
 // give the integer a value
 newMessage = Integer.valueOf(readMessages);
 // try some simple division
 newMessage = newMessage / 100;
 // back to a string
 String finalMessage = Integer.toString(newMessage);
 // display the result
 mConversationArrayAdapter.add(mConnectedDeviceName+":  " + finalMessage);

スタックトレース

01-25 18:09:12.905: E/AndroidRuntime(5413): 致命的な例外: メイン 01-25 18:09:12.905: E/AndroidRuntime(5413): java.lang.NumberFormatException: 無効な int: "" 01-25 18:09:12.905: E/AndroidRuntime(5413): java.lang.Integer.invalidInt(Integer.java:138) 01-25 18:09:12.905: E/AndroidRuntime(5413): java.lang.Integer で.parseInt(Integer.java:359) 01-25 18:09:12.905: E/AndroidRuntime(5413): java.lang.Integer.parseInt(Integer.java:332) で

4

1 に答える 1

1

使用している正規表現は、「00」や「0」などが入力されたときに「」(空の文字列)を返すため、正しくありません。以下のコードで正規表現を使用することをお勧めします。

あなたの便宜のために、正規表現があなたのニーズを満たしているかどうかをチェックするための簡単なテストプログラムを提供します。疑問がある場合は、テストを追加してください。

package stackoverflow.answers;

public class ParsingTest {

    public static void main(String[] args) {

        System.out.println("Result is " + extractInteger("010"));
        System.out.println("Result is " + extractInteger("1010"));
        System.out.println("Result is " + extractInteger("0001"));
        System.out.println("Result is " + extractInteger("0000"));
        System.out.println("Result is " + extractInteger("11A0"));

    }

    private static Integer extractInteger(String s) {
        Integer i = null;
        String t = s.replaceFirst("^0+(?!$)", "");
        try {
            i = Integer.valueOf(t);
        } catch (Exception e) {
            e.printStackTrace();
            // to be sure you return always something
            // null could be other value returned
            // in that case use a finally
            return 0;
        }
        return i;
    }

}

解析に問題がある場合は0を返すことを好むことに注意してください。ヌルまたは別の整数(-1?)を返すことを決定できます。

于 2013-01-25T23:14:00.010 に答える