2014-07-18 71 views
0

我正在开发一款应用程序,用于通过手机和具有SIM卡的电子设备之间的短信进行M2M通信。划分字符串点分隔

当我从移动设备向设备发送命令时,该设备向具有该结构的移动设备返回确认字符串。

确认OK:

DEV33456, 15, Date: yy/mm/dd-hh:mm:ss. OK 

确认错误:

DEV33456, 15, Date: yy/mm/dd-hh:mm:ss. ERROR 

现在,在我的应用我来管理这个消息来获得相关信息。例如,该消息的第一部分是识别码(DEV33456)所以要得到它,我拆分消息:

String[] separated = message.split(","); 
String ident = separated[0]; //DEV33456 

但现在,我需要的最后一个字(OK或ERROR),以确定是否该消息是否可以。要做到这一点,我认为最简单的方法应该是使用OK或ERROR字前面的点来分割消息。是整个消息中的唯一的一点,所以它应该是这样划分的:

String[] separated = message.split("."); 
String unused = separated[0]; //DEV33456, 15, Date: yy/mm/dd-hh:mm:ss 
String error = separated[1]; //OK or ERROR 

但它抛出ArrayIndexOutOfBoundsException与调试它,我看到第一行后,其中separated字符串数组应该有一个lenght 2,它的长度为0.

使用"."分割字符串有什么问题吗?我已经完成了相同的过程来使用","来分割它,并且它已经正确地完成了int。

回答

7

Java split使用正则表达式,.是正则表达式中的特殊字符。

您需要使用字符串"\\."将其转义。

+0

已检查并正常工作。谢谢! – masmic

2

为什么不直接使用

message.endsWith("OK") 
+0

我甚至不知道那个表情。我会考虑到它! – masmic

+0

对于不区分大小写的方式'message.toUpperCase()。endsWith(“OK”)';) –

+0

@SyamS这样做会起作用,但效率会很低,但它会使整个字符串不完整,然后只比较结尾。 –

0

检查,如果这是想你想:

if(message.substring(message.length()-2, message.length()) 
     .toLowerCase().contains("ok")) 
    Log.d("yes"); 
else 
    Log.d("no"); 

希望它是。