在Android bluetoothchat中转换字符串

时间:2013-01-20 22:08:00

标签: java android

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

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

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

查看BluetoothChat.java中的代码我认为我需要将MESSAGE_READ中创建的字符串转换为Integer值,操纵此整数,将其转换回字符串并将此结果发送到显示器。 这是正确的方法吗?我尝试过使用Integer.parseInt()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);

Stacktrace

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):at java.lang.Integer.invalidInt(Integer.java:138) 01-25 18:09:12.905:E / AndroidRuntime(5413):at java.lang.Integer.parseInt(Integer.java:359) 01-25 18:09:12.905:E / AndroidRuntime(5413):at java.lang.Integer.parseInt(Integer.java:332)

1 个答案:

答案 0 :(得分: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?)。