Java字符串解析与不同的正则表达式来分割

标签 java string parsing

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;"

我无法控制更改该字符串创建方式的格式。

我尝试了这个,但我无法真正获取第一个键“Tick for symbol”、“timestamp_sec”等的值。

不仅在这个特定的字符串中,我很好奇如何解析具有多个正则表达式分割的字符串。任何帮助将不胜感激。

   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]);
          }

    }

编辑
所需的 map 输出:
(勾选符号,.ISEQ-IDX)
(描述符 ID,1)
(时间戳_秒,20130628030105)
(时间戳_usec,384000)
(EXCH_TIME,1372388465384)
(SENDING_TIME,0)
(价格,3957.890000)
(麦克风,XDUBIND)

最佳答案

下面这个怎么样?您指定键值模式对的列表。键直接指定为字符串,值指定为正则表达式。然后,您浏览此列表并在文本中搜索键,然后搜索值模式,如果找到它,则提取该值。

我假设 key 可以按任何顺序排列,并非所有 key 都必须存在,可能有多个空格将它们分开。如果您知道按键的顺序,则始终可以在上一个 find 结束的位置开始 find。如果您知道所有键都是必需的,那么如果您没有找到您要查找的内容,则可以抛出异常。

    static String test="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;";

    static List<String> patterns = Arrays.asList(
        "Tick for symbol", "\\S+",
        "descriptor id", "\\d+",
        "timestamp_sec", "\\d+",
        "timestamp_usec", "\\d+",
        "EXCH_TIME", "\\d+",
        "SENDING_TIME","\\d+",
        "PRICE", "\\d+.\\d",
        "MIC", "\\S+"
      );


        public static void main(String[] args) {
            Map<String,String> map = new HashMap<>();

            for (int i = 0; i<patterns.size();i+=2) {
                String key = patterns.get(i);
                String val = patterns.get(i+1);
                String pattern = "\\Q" +key + "\\E\\s+(" + val + ")";
                Matcher m = Pattern.compile(pattern).matcher(test);

                if (m.find()) {
                    map.put(key, m.group(1));
                }
            }
            System.out.println(map);

        }

关于Java字符串解析与不同的正则表达式来分割,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17414140/

相关文章:

javascript - 如何在 JSON.stringify() 中将值保持为数字

c# - 获取奇数长度字符串的中间三个字符

javascript - 创建 XML DOM 元素同时保持区分大小写

java - 如何知道类上的有界类型参数

java - 运行 Test.class,但无法加载 ApplicationContext

java - 调用方法时将数组初始化为参数

java - 如何在 postgres 中没有时区的情况下节省时间。我正在使用 hibernate Spring MVC

c - 我如何编写一个返回字符串的函数?

python - 如何从一行文本创建字典?

python - 解析奇怪的网页-多个html标签