0

我是java的初学者我有

packet=090209153038020734.0090209153039020734.0 

像这样我想拆分这个字符串并存储到一个像两个字符串一样的数组中:

1) 090209153038020734.0
2) 090209153039020734.0

我已经这样做了:

String packetArray[] = packets.split(packets,Constants.SF); 

其中:常量.SF=0x01。

但它不会起作用。

请帮我。

4

6 回答 6

3

我会三思而后行,因为这些显然是固定宽度的字段。

我以前在这里的另一个问题上见过他们(实际上有几个,所以我猜这可能是家庭作业(或流行的数据收集设备:-)),很明显协议是:

  • STX (0x01)。
  • 0x0f。
  • 日期(YYMMDD 或 DDMMYY)。
  • 时间(HHMMSS)。
  • 0x02。
  • 值(XXXXXX.X)。
  • 0x03。
  • 0x04。

而且,鉴于它们的宽度是固定的,您可能应该只使用子字符串来获取信息。

于 2009-02-09T10:11:41.477 回答
2
String packetArray[] = packets.split("\u0001");

应该管用。您正在使用

public String[] split(String regex, int limit)

它正在做其他事情:它确保split()返回一个最多包含成员的数组limit(在这种情况下为 1,所以你得到你想要的)。

于 2009-02-09T14:05:57.733 回答
2

String 的 JavaDoc 在这里很有帮助:http: //java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html

你有你的字符串数据包;

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”之后开始到字符串末尾的所有内容。

现在,如果您希望它们明确地放入一个数组中,您可以将它们放在那里。整个代码 - 我可能有一些“一个” -错误。

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;
于 2009-02-09T10:07:07.883 回答
1

您需要阅读String.split() 方法的 Javadocs ...您正在调用采用正则表达式和限制的 String.split() 版本,但是您将字符串本身作为第一个参数传递,真的没有意义。

正如 Aaron Digulla 提到的,使用其他版本。

于 2009-02-09T16:54:28.577 回答
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)};

您的解决方案将正则表达式与字符串混淆。

于 2009-02-09T10:04:24.647 回答
0

split 使用此处记录的正则表达式。您的代码似乎试图匹配整个字符串 Constants.SF = 0x01 次,这没有多大意义。如果您知道盒子是什么字符,那么您可以使用 {[^c]+cc} 之类的东西,其中 c 是盒子的字符(我猜这是 0x01)来匹配每个“数据包”。

我认为您正在尝试像 .net String.Split(...) 函数一样使用它?

于 2009-02-09T10:06:34.280 回答