Java 将hashmap中的值标记化

Java 将hashmap中的值标记化,java,hashmap,stringtokenizer,Java,Hashmap,Stringtokenizer,我有一个映射,它的键值和字符串一样长。地图的值从数据库中获取,格式如下 1: BusinessPartner.name1,BusinessPartner.name2,BusinessPartner.name3,BusinessPartner.name4 2: BusinessPartner.name1,BusinessPartner.name2,BusinessPartner.name3 6: ADDRESS.addressline1,ADDRESS.addressline2,ADDRESS.a

我有一个映射,它的键值和字符串一样长。地图的值从数据库中获取,格式如下

1: BusinessPartner.name1,BusinessPartner.name2,BusinessPartner.name3,BusinessPartner.name4
2: BusinessPartner.name1,BusinessPartner.name2,BusinessPartner.name3
6: ADDRESS.addressline1,ADDRESS.addressline2,ADDRESS.addressline3
其中1、2、6是键

我需要标记键1的字符串,结果应该是 业务伙伴和其他值应为name1、name2、name3、name4。 我这样做是因为我需要将这些值作为 地图(名称1、名称2、名称3、名称4)> 我可以拆分字符串,但如何将Businesspartner作为其他实体的通用值

有人能告诉我怎么做吗


谢谢

这对你的生活有用吗

public class Tokenize {

    static Long keysFromDB[] = {1L, 2L, 6L};
    static String stringsFromDB[] = {
        "BusinessPartner.name1,BusinessPartner.name2,BusinessPartner.name3,BusinessPartner.name4",
        "BusinessPartner.name1,BusinessPartner.name2,BusinessPartner.name3",
        "ADDRESS.addressline1,ADDRESS.addressline2,ADDRESS.addressline3"};

    @Test
    public void tokenize() {
        // use linked hashmap to preserve the order
        Map<Long, Set<String>> tokenized = new LinkedHashMap<Long, Set<String>>();
        int c = 0;
        for(Long key : keysFromDB) {
            // use linked hashset to preserve the order
            Set<String> record = new LinkedHashSet<String>();
            String splitedDBStrings[] = stringsFromDB[c++].split("\\.|,");
            System.out.println("List: " + Arrays.asList(splitedDBStrings));
            for(String s : splitedDBStrings) {
                record.add(s);
            }
            System.out.println("Set:  " + record);
            tokenized.put(key, record);
        }

        System.out.println(tokenized);
    }
}
公共类标记化{
静态长键FromDB[]={1L,2L,6L};
静态字符串stringsFromDB[]={
“BusinessPartner.name1,BusinessPartner.name2,BusinessPartner.name3,BusinessPartner.name4”,
“BusinessPartner.name1,BusinessPartner.name2,BusinessPartner.name3”,
“ADDRESS.addressline1,ADDRESS.addressline2,ADDRESS.addressline3”};
@试验
公共void标记化(){
//使用链接hashmap保留顺序
Map tokenized=新建LinkedHashMap();
int c=0;
for(长键:keysFromDB){
//使用链接哈希集保留顺序
Set record=newlinkedhashset();
String splitedDBStrings[]=stringsFromDB[c++].split(“\\.\124;,”);
System.out.println(“List:+Arrays.asList(splitedDBStrings));
用于(字符串s:spliteddbstring){
记录。添加;
}
系统输出打印项次(“设置:+记录);
标记化。放置(键、记录);
}
System.out.println(标记化);
}
}

让我们从头开始:

final Pattern pattern = Pattern.compile("[,\\s*]?([^.]+)\\.([^,]+)[,\\s*]?");
final Map<Long, String> myMap = getMapFromSomewhere();    

for(final Map.Entry<Long, String> entry : myMap.entrySet()) {
  final String myString = entry.getValue(); 
  final Matcher matcher = pattern.matcher(myString);      
  final Map<String, List<String>> tokenised = new HashMap<String, List<String>>();
  while (matcher.find()) {
    final String key = matcher.group(1);
    List<String> names = tokenised.get(key);
    if(names == null) {
       names = new LinkedList<String>();
       tokenised.put(key, names)
    }
    names.add(matcher.group(2));
  }
  //do stuff with map.
}
输出:

BusinessPartner
name1
BusinessPartner
name2
BusinessPartner
name3
BusinessPartner
name4
运行这个

public static void main(String[] args){
    Map<Long, String> dbmap = new HashMap<Long, String>();
    dbmap.put((long) 1, "BusinessPartner.name1,BusinessPartner.name2,BusinessPartner.name3,BusinessPartner.name4");
    dbmap.put((long) 2, "BusinessPartner.name1,BusinessPartner.name2,BusinessPartner.name3");
    dbmap.put((long) 6, "ADDRESS.addressline1,ADDRESS.addressline2,ADDRESS.addressline3");

    //Loop through the Map
    Iterator<Entry<Long, String>> iterator = dbmap.entrySet().iterator();
    while(iterator.hasNext()){

        Map.Entry<Long, String> entry = (Map.Entry<Long, String>) iterator.next();

        //Split the string on comma ','
        //result entries should be 'BusinessPartner.name1', 'BusinessPartner.name2' etc
        String[] commaSplit = entry.getValue().split(",");

        //loop through each entry
        for(int x=0; x<commaSplit.length; x++){

            //Split on Full Stop
            //Result should be 'BusinessPartner', 'name2'
            String[] dotSplit = commaSplit[x].split("\\.");

            //print out common Value
            System.out.println("Common Value is : " + dotSplit[0]);

            //print out second value
            System.out.println("Second Value is : " + dotSplit[1]);

            System.out.println();
        }
    }
}

我想他希望
业务伙伴
地址
(字符串正在重复)成为结果的一部分我想他只想要一次,他写
结果应该是业务伙伴,其他值应该是name1,name2,name3,name4。
因此
业务伙伴,name1,name2,name3,name4
感谢朋友们的回复
public static void main(String[] args){
    Map<Long, String> dbmap = new HashMap<Long, String>();
    dbmap.put((long) 1, "BusinessPartner.name1,BusinessPartner.name2,BusinessPartner.name3,BusinessPartner.name4");
    dbmap.put((long) 2, "BusinessPartner.name1,BusinessPartner.name2,BusinessPartner.name3");
    dbmap.put((long) 6, "ADDRESS.addressline1,ADDRESS.addressline2,ADDRESS.addressline3");

    //Loop through the Map
    Iterator<Entry<Long, String>> iterator = dbmap.entrySet().iterator();
    while(iterator.hasNext()){

        Map.Entry<Long, String> entry = (Map.Entry<Long, String>) iterator.next();

        //Split the string on comma ','
        //result entries should be 'BusinessPartner.name1', 'BusinessPartner.name2' etc
        String[] commaSplit = entry.getValue().split(",");

        //loop through each entry
        for(int x=0; x<commaSplit.length; x++){

            //Split on Full Stop
            //Result should be 'BusinessPartner', 'name2'
            String[] dotSplit = commaSplit[x].split("\\.");

            //print out common Value
            System.out.println("Common Value is : " + dotSplit[0]);

            //print out second value
            System.out.println("Second Value is : " + dotSplit[1]);

            System.out.println();
        }
    }
}
Common Value is : BusinessPartner
Second Value is : name1

Common Value is : BusinessPartner
Second Value is : name2

Common Value is : BusinessPartner
Second Value is : name3

Common Value is : BusinessPartner
Second Value is : name4

Common Value is : BusinessPartner
Second Value is : name1

Common Value is : BusinessPartner
Second Value is : name2

Common Value is : BusinessPartner
Second Value is : name3

Common Value is : ADDRESS
Second Value is : addressline1

Common Value is : ADDRESS
Second Value is : addressline2

Common Value is : ADDRESS
Second Value is : addressline3