Java正则表达式从多行字符串创建映射

时间:2014-03-23 03:19:01

标签: java regex

我正在尝试从具有各种模式的多行字符串创建Map。 例如,考虑以下字符串:

:20:94001142322029214336
    1234
    6789
:86F:/PG/1L123
:25|11298666
:28G::20/1345
      xyz

我的模式如下:

开始:::|||并以: OR ::|或{{结尾1}} 我正在尝试按如下方式创建地图:

||

值= 20/1            XYZ

该值可以是多行,因此我需要将值中的所有行作为该键的映射值的一部分。

您能否帮我创建Java正则表达式或任何其他可以帮助我创建此地图的解决方案?

2 个答案:

答案 0 :(得分:1)

分割字符串
String[] lineElements = line.split("(?:\\:|\\|){1,2}");

要么只有一个元素,这意味着没有键(在这种情况下,你需要使用最新的一个,你需要跟踪它),或者有三个元素:

  1. 一直空着
  2. 关键
  3. 为了允许此过程的反向(基于已经解析的数据重新创建输入文件),您可以将每行的数据存储到其自己的对象中,例如

    public class WhateverDataObject  {
       public final String key;
       public final String value;
       public WhateverDataObject(String key, String value)  {
          this.key = key;
          this.value = value;
       }
       public String toString()  {
          ":" + key + ":" + value;
       }
    }
    

    然后输出每个对象的toString()

    如果你需要分隔符完全一样,那就更需要工作,因为你需要预先分析每一行,然后将这些元素添加到{{1 },包括其DataObject

答案 1 :(得分:0)

你可以尝试使用它..

将所有可能的密钥标识符替换为一个..然后使用它们进行拆分..

import java.util.Arrays;
import java.util.HashSet;

public class HelloWorld{

     public static void main(String []args)
     {
        String input = ":20:94001142322029214336\n1234\n6789\n:86F|/PG/1L123\n:25||11298666\\:28G::20/1345\nxyz";
         System.out.println(input+"\n\n");

        input=input.replace("::",":");
        input=input.replace("||",":");
        input=input.replace("|",":");
         System.out.println(input+"\n\n");

        String words[] = input.split(":");
        for(int index = 1;index<words.length;index++)
        {
             System.out.println("Key = "+words[index]+"\nValue = "+words[++index]);
        }
     }