我见过各种拆分字符串的方法。我已经从这篇文章中尝试过。
我正在尝试读取并拆分下一个字符串:{2b 00 00}
我看到最常见的情况是拆分一条用“:”分隔的消息,但在这种情况下,我的消息是用空格分隔的。
尝试两种方式,使用常规split()
函数或使用StringTokenizer
我得到一个“nullpointerexception”,我认为这是由于空间的原因:
private String splitReceivedString(String s) {
String[] separated = s.split(" ");
return separated[1];
}
我怎样才能得到这种字符串的值?
添加了可能存在问题的代码
在检查了您的一些答案后,我确实意识到问题来自蓝牙输入流。我从中得到空值。所以,这是我用来接收消息的代码:
该代码与 bluetoothChat 示例几乎相同。但是它被修改以适应我的程序,所以我可能有什么问题。
我有一个 MCU {2b 00 00}
,当我向它发送另一个字符串时,它会返回这个字符串。我认为这是在connectedThread
:
public class ConnectedThread extends Thread {
public void run() {
byte[] buffer = new byte[1024]; // buffer store for the stream
int bytes; // bytes returned from read()
/**Keep listening to the InputStream until an exception occurs*/
while (true) {
try {
/**Read from the InputStream*/
bytes = GlobalVar.mmInStream.read(buffer);
/**Send the obtained bytes to the UI activity*/
GlobalVar.mHandler.obtainMessage(GlobalVar.MESSAGE_READ, bytes, -1, buffer).sendToTarget();
因此,这是将字符串发送给主要活动中的处理函数:
public final Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case GlobalVar.MESSAGE_STATE_CHANGE:
//The code here is irelevant
case GlobalVar.MESSAGE_WRITE:
byte[] writeBuf = (byte[]) msg.obj;
/**construct a string from the buffer*/
String writeMessage = new String(writeBuf);
GlobalVar.mCommunicationArrayAdapter.add(writeMessage);
break;
case GlobalVar.MESSAGE_READ:
byte[] readBuf = (byte[]) msg.obj;
/**construct a string from the valid bytes in the buffer*/
String readMessage = new String(readBuf);
GlobalVar.mCommunicationArrayAdapter.add(readMessage);
GlobalVar.readString = readMessage;
break;
然后,变量GlobalVar.readString
是我在 split 函数中得到的变量:
private String splitReceivedString (String s) {
String[] separated = s.split(" ");
return separated[1];
}
receive1 = splitReceivedString (GlobalVar.readString);
所以,问题是它没有正确读取接收到的字符串,我不知道如何修复它。