我见过各种分割字符串的方法。我试过this帖子。
我正在尝试阅读并拆分下一个字符串:{2b 00 00}
我看到最常见的情况是拆分用“:”分隔的邮件,但在这种情况下,我的邮件用空格分隔。
尝试两种方式,使用常规split()
函数或使用StringTokenizer
我得到一个“nullpointerexception”,这是因为空间原因引起的:
private String splitReceivedString(String s) {
String[] separated = s.split(" ");
return separated[1];
}
我怎样才能获得这种字符串的值?
添加可能存在问题的代码
在检查了你的一些答案后,我意识到问题来自蓝牙输入流。我从它得到空值。所以,这是我用来接收消息的代码:
代码几乎与bluetoothChat示例相同。但它被修改以适应我的程序,所以我可能有问题。
我有一个MCU,当我向它发送另一个String时,它返回给我这个字符串{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);
所以,问题是它没有正确读取收到的字符串,我不知道如何解决它。
答案 0 :(得分:1)
如果你得到NullPointerException
这不能归因于你传递给split函数的字符串" "
- 这绝对不是null。由于任何原因,您作为String s
方法参数获得的splitReceivedString
似乎为null
。
答案 1 :(得分:0)
将一些输出(System.out.println或其他)插入到调试
你的是什么
分隔了多少元素
什么是分隔[0](如果你只有一个元素)
尝试使用
s.split("\\s");
在任何空格处拆分。
答案 2 :(得分:0)
我在控制台应用程序中测试了您的代码。我将双引号更改为单引号,并且“Split”方法中存在拼写错误
static void Main(string[] args)
{
splitReceivedString("2b 00 00"); //1
}
public static string splitReceivedString(String s)
{
string[] separated = s.Split(' '); //2
return separated[1];
}
答案 3 :(得分:0)
您想使用正则表达式来拆分字符串。 试试这样
String splitString = "2b 00 00";
String delim = "[ ]";
//here we split the string wherever we see a character matching
//the inside of our square brackets. In this case a space
String[] splitResults = splitString.split(delim);
我已对此进行了测试,它可以提供以下结果
splitResults[0] = "2b"
splitResults[1] = "00"
splitResults[2] = "00"