使用要拆分的不同正则表达式进行Java字符串解析
str="Tick for symbol .ISEQ-IDX descriptor id 1 timestamp_sec 20130628030105 timestamp_usec 384000;EXCH_TIME 1372388465384;SENDING_TIME 0;PRICE 3957.890000;MIC XDUBIND;"
我无法控制更改如何创建此字符串的格式
我试过这个,但我不能真正得到第一个键的值“勾选符号”、“时间戳秒”等等
不仅在这个特定的字符串中,我还对如何解析带有多个正则表达式拆分的字符串感到好奇。任何帮助都将不胜感激
String[] s = line.split(";");
Map<String, String> m = new HashMap<String, String>();
for (int i = 0; i < s.length; i++)
{
String[] split = s[i].split("\\s+");
for (String string2 : split)
{
//Adding key value pair. to a map for further usage.
m.put(split[0], split[1]);
}
}
编辑
将所需输出转换为映射:
(勾选符号,.ISEQ-IDX)
(描述符id,1)
(时间戳_sec,20130628030105)
(时间戳_usec,384000)
(EXCH_时间,1372388465384)
(麦克风,XDUBIND)
# 1 楼答案
我认为正则表达式在这里帮不了你,不管是谁设计了输出字符串,他显然没有想到拆分
我建议简单地用循环解析字符串,然后手动完成整个过程。或者,您可以在字符串中查找子字符串(吮吸为“勾选符号”),然后选择后面的任何单词(直到下一个空格),因为第二个参数似乎总是一个单词
# 2 楼答案
下面呢?您可以指定键值模式对的列表。键直接指定为字符串,值直接指定为正则表达式。然后遍历此列表,在文本中搜索键,然后搜索值模式,如果找到,则提取值
我假设钥匙可以是任意顺序的,不是所有的都必须存在,可能有多个空格将它们隔开。如果您知道键的顺序,则始终可以在前一个
find
结束的地方开始find
。如果您知道所有键都是必需的,那么如果找不到要查找的内容,可以抛出异常# 3 楼答案
使用java中的
Pattern
类。util。正则表达式包,在本java Regex tutorial中逐步描述:编辑:使用
group
而不是replaceAll
,因为它更有意义而且速度更快