我正在尝试从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)
答案 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?)。