我正在尝试从具有各种模式的多行字符串创建Map。 例如,考虑以下字符串:
:20:94001142322029214336
1234
6789
:86F:/PG/1L123
:25|11298666
:28G::20/1345
xyz
我的模式如下:
开始:
或::
或|
或||
并以:
OR ::
或|
或{{结尾1}}
我正在尝试按如下方式创建地图:
||
值= 20/1 XYZ
该值可以是多行,因此我需要将值中的所有行作为该键的映射值的一部分。
您能否帮我创建Java正则表达式或任何其他可以帮助我创建此地图的解决方案?
答案 0 :(得分:1)
用
分割字符串String[] lineElements = line.split("(?:\\:|\\|){1,2}");
要么只有一个元素,这意味着没有键(在这种情况下,你需要使用最新的一个,你需要跟踪它),或者有三个元素:
为了允许此过程的反向(基于已经解析的数据重新创建输入文件),您可以将每行的数据存储到其自己的对象中,例如
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]);
}
}