【问题标题】:convert string as key value pair and make it into one single line in java将字符串转换为键值对并在java中将其转换为一行
【发布时间】:2020-07-12 17:06:45
【问题描述】:

我想用冒号分割字符串,并把它变成键值对。为此,在convert 函数中,我取了一行并将其制成键值对。

我想转换line 变量。问题出在convert 函数中。它没有按预期转换。它必须显示如下所示的预期输出。我不想将代码拆分为每个键值对的新行。我想在同一行用逗号来做。

代码是

import java.util.HashMap;
import java.util.Map;

import com.google.common.base.Splitter;

public class stack {

    public static Map<String, String> convert(String str, String SplitByWhat) {
        String[] tokens = str.split(SplitByWhat);
        Map<String, String> map = new HashMap<>();
        for (int i = 0; i < tokens.length - 1;) {
            map.put(tokens[i++], tokens[i++]);
        }
        return map;
    }

    public static void main(String[] args) {
        
        String line = "Name : Md . Abdur Rab , CI : Marketing  Petroleum Products , In : May 2013 , Hpc : President , Bd : April 14 , Bg : B + , Wd : October 10 , Sp : Quazi Manzida Rab , Bd : August 22 , Bg : B + , Ma : 689  Bara Moghbazar  Dhaka - 1217 , Tel : ( 0 ) 935 1684  835 0818 , Mob : 01819 247 932 , Email : mdarab123@gmail.com";
        
        Iterable<String> result = Splitter.on(" , ").trimResults().split(line);

        for (String v : result) {
            Map<String, String> response = convert(v, ":");
            System.out.println(response);
        }

    }
}

输出是

{Name = Md . Abdur Rab}
{CI = Marketing  Petroleum Products}
{In = May 2013}
{Hpc = President}
{Bd = April 14}
{Bg = B +}
{Wd = October 10}
{Sp = Quazi Manzida Rab}
{Bd = August 22}
{Bg = B +}
{Ma = 689  Bara Moghbazar  Dhaka - 1217}
{Tel = ( 0 ) 935 1684  835 0818}
{Mob = 01819 247 932}
{Email = mdarab123@gmail.com}

预期输出

{Name = Md . Abdur Rab, CI = Marketing  Petroleum Products, In = May 2013, Hpc = President, Bd = April 14, Bg = B +, Wd = October 10, Sp = Quazi Manzida Rab, Bd = August 22, Bg = B +, Ma = 689  Bara Moghbazar  Dhaka - 1217, Tel = ( 0 ) 935 1684  835 0818, Mob = 01819 247 932, Email = mdarab123@gmail.com}

【问题讨论】:

  • 你每次都初始化你的地图,所以在循环之前创建一个并在循环中添加条目,并将System.out.println(response);移到循环之外。
  • @YCF_L 感谢您的评论但无法正常工作,因为我还需要键值对来通过此代码执行进一步操作。

标签: java string hashmap


【解决方案1】:

每次调用 convert() 并打印出来时,您都会创建一个新地图,因此您正在为每行打印一张地图,每行用“,”分隔。

你想做的事情是这样的:

public static void main(String[] args) {
    String line = ...
    Iterable<String> result = Splitter.on(" , ").trimResults().split(line);

    Map<String, String> response - new HashMap<>();
    for (String v : result) {
        Entry<String, String> entry = convert(v, ":");
        response.put(entry.getKey(), entry.getValue());
    }
    System.out.println(response);
}

其中convert() 返回类型Entry&lt;String, String&gt;

见:https://docs.oracle.com/javase/8/docs/api/java/util/Map.Entry.html

【讨论】:

  • 先生,这里有个问题。当我输入 response.put(convert(v, ":")) 时显示 Expected 2 arguments but found 1 。我该怎么办?
【解决方案2】:

你好,我修改了你的代码来打印你想要的,所以试试这个代码:

public static Map<String, String> convert(String str, String SplitByWhat) {
    String[] tokens = str.split(SplitByWhat);
    Map<String, String> map = new HashMap<>();
    for (int i = 0; i < tokens.length - 1;) {
        map.put(tokens[i++], tokens[i++]);
    }
    return map;
}

public static void main(String[] args) {

    String line = "Name : Md . Abdur Rab , CI : Marketing  Petroleum Products , In : May 2013 , Hpc : President , Bd : April 14 , Bg : B + , Wd : October 10 , Sp : Quazi Manzida Rab , Bd : August 22 , Bg : B + , Ma : 689  Bara Moghbazar  Dhaka - 1217 , Tel : ( 0 ) 935 1684  835 0818 , Mob : 01819 247 932 , Email : mdarab123@gmail.com";

    Iterable<String> result = Splitter.on(" , ").trimResults().split(line);

    String response = "";

    for (String v : result) {
        response += convert(v, ":");
    }

    response = response.replace("{","");
    response = response.replace("}",", ");
    response = "{" + response + "}";

    System.out.println(response);

}

玩得开心,希望能帮到你!

【讨论】:

    猜你喜欢
    • 2021-12-06
    • 2021-03-30
    • 1970-01-01
    • 2023-01-12
    • 2019-09-20
    • 1970-01-01
    • 2020-09-27
    • 2015-12-20
    • 1970-01-01
    相关资源
    最近更新 更多