-2

我正在尝试从 TTL 输出设备获取串行数据,将其通过 JY-MCU 加密狗并在我的 Android 手机上读取。数据以 4 位 ASCII 十进制数字形式发送,后跟回车和换行。

使用 BluetoothChat,我可以在手机上正确看到传输的号码,但我想在应用程序中操纵号码,然后将操纵结果发送到屏幕。

我只需要读取数据,而不是发送它。

查看中的代码,BluetoothChat.java我想我需要将 MESSAGE_READ 中创建的字符串转换为一个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): 致命异常: main 01-25 18:09:12.905: E/AndroidRuntime(5413): java.lang.NumberFormatException: Invalid 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,您可以决定返回 null 或不同的整数(-1?)。

于 2013-01-25T23:14:00.010 回答