我是java的初学者
packet=090209153038020734.0090209153039020734.0
像这样我想把这个字符串拆分并存储到一个像两个字符串的数组中:
1) 090209153038020734.0
2) 090209153039020734.0
我这样做了:
String packetArray[] = packets.split(packets,Constants.SF);
其中: Constants.SF = 0×01。
但它不起作用。
请帮帮我。
答案 0 :(得分:3)
我会考虑使用拆分,因为那些显然是固定宽度字段。
我之前在另一个问题上见过它们(实际上有几个,所以我猜这可能是作业(或者是一个流行的数据收集设备:-))而且很明显协议是:
而且,鉴于它们是固定宽度,你应该只使用子串来获取信息。
答案 1 :(得分:2)
字符串的JavaDoc在这里很有用:http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html
你有你的String包;
String.indexOf(String)
为您提供特殊子字符串的位置。你对“。”感兴趣。标志。所以你写了
int position = packet.indexOf(".")+1
+1因为你也想要尾随小数。它将返回20-ish,并将成为第一个数字的最后一个位置。
然后我们使用子串
String first = packet.substring(0,position)
会为您提供“.0”的所有内容
String second = packet.substring(position-1)
应该为您提供从“.0”开始直到字符串结尾的所有内容。
现在,如果你想明确地将它们放入数组中,你可以将它们放在那里。代码作为一个整体 - 我可能有一些“一个接一个”-bugs。
int position = packet.indexOf(".")+1
String first = packet.substring(0,position)
String second = packet.substring(position-1)
String[] packetArray = new String[2];
packetArray[0] = first;
packetArray[1] = second;
答案 2 :(得分:2)
String packetArray[] = packets.split("\u0001");
应该有效。您正在使用
public String[] split(String regex, int limit)
正在做其他事情:它确保split()
返回一个最多有limit
个成员的数组(在这种情况下为1,所以你得到了你要求的内容)。
答案 3 :(得分:1)
您需要阅读Javadocs for the String.split() methods ...您正在调用带有正则表达式和限制的String.split()版本,但您将字符串本身作为第一个参数传递,这真的没有意义。
正如Aaron Digulla所说,请使用其他版本。
答案 4 :(得分:0)
你没有说你想怎么做分裂。它可以基于固定长度(字符数)或您想要一个小数位。
如果前者你可以做packetArray = new String [] {packet.substring(0,20),packet.substring(21)};
int dotIndex = packets.indexOf('.');
packetArray = new String[]{packet.substring(0, dotIndex+2), packet.substring(dotIndex+2)};
您的解决方案会将正则表达式与字符串混淆。
答案 5 :(得分:0)
拆分使用regular expressions作为记录here。你的代码似乎试图匹配整个字符串Constants.SF = 0x01次,这没有多大意义。如果您知道框中的字符是什么,那么您可以使用类似{[^ c] + cc}的内容,其中c是框的字符(我猜这是0x01),以匹配每个“数据包”。
我认为你试图像.net String.Split(...)函数一样使用它?