当前位置: 首页 > 面试题库 >

将字符串拆分为键值对

壤驷德寿
2023-03-14
问题内容

我有一个像这样的字符串:

pet:cat::car:honda::location:Japan::food:sushi

现在:指示键值对,而::将其分开。我想将键值对添加到地图。

我可以使用以下方法实现此目的:

Map<String, String> map = new HashMap<String, String>();
String test = "pet:cat::car:honda::location:Japan::food:sushi";
String[] test1 = test.split("::");

for (String s : test1) {
    String[] t = s.split(":");
    map.put(t[0], t[1]);
}

for (String s : map.keySet()) {
    System.out.println(s + " is " + map.get(s));
}

但是,有一种有效的方法吗?

我觉得代码效率低下,因为我使用了2个String[]对象并split两次调用了该函数。另外,我正在使用t[0],如果没有值t[1],可能会引发ArrayIndexOutOfBoundsException


问题答案:

您可以使用以下代码对split()进行一次调用,并对String进行一次传递。但是,它当然首先假定字符串有效:

    Map<String, String> map = new HashMap<String, String>();
    String test = "pet:cat::car:honda::location:Japan::food:sushi";

    // split on ':' and on '::'
    String[] parts = test.split("::?");

    for (int i = 0; i < parts.length; i += 2) {
        map.put(parts[i], parts[i + 1]);
    }

    for (String s : map.keySet()) {
        System.out.println(s + " is " + map.get(s));
    }

上面的代码 可能
比您的解决方案更有效,但是,如果您发现代码更清晰,请保留它,因为这样的优化几乎会对您的性能产​​生重大影响,除非您进行数百万次,否则几乎没有任何机会。无论如何,如果它是如此重要,那么您应该进行测量和比较。

编辑:

对于那些想知道::?上面代码中的含义的人:String.split()以正则表达式作为参数。分隔符是与正则表达式匹配的子字符串。::?是一个正则表达式,表示:1个冒号,后跟0或1个冒号。因此,它允许考虑:::作为分隔符。



 类似资料:
  • 问题内容: 一些外部数据供应商希望给我一个数据字段-管道分隔的字符串值,我觉得这很难处理。 没有应用程序编程语言的帮助,有没有办法将字符串值转换为行? 但是,存在一个困难,该字段具有未知数量的定界元素。 有问题的数据库引擎是MySQL。 例如: 问题答案: 它可能没有我最初想象的那么困难。 这是一种通用方法: 计算分隔符的出现次数 循环多次,每次获取一个新的定界值并将该值插入第二个表中。

  • 问题内容: 我有一个像这样的字符串: 键=值,键2 =值2 我想将其解析为如下形式: 我可以做类似的事情 但这似乎很可笑。必须有某种方法可以使PHP更智能吗? 问题答案: 如果您不介意使用正则表达式…

  • 问题内容: 我正在尝试找到一种将String拆分为String数组的方法,并且每当遇到白色香料时就需要对其进行拆分,例如 “嗨,我是保罗” 进入” “嗨”“我”“保罗” 如何使用RegularExpression在split()方法中表示空格? 问题答案: 您需要一个正则表达式,例如,这意味着: 每当遇到至少一个空格时就进行拆分 。完整的Java代码是:

  • 问题内容: 我有一个像这样的字符串: 我希望它是一个关联数组,以便可以执行以下操作: 我知道我可以在反斜杠上爆炸,但不确定如何从那里开始。 问题答案: 通过和使用简单的正则表达式通常是最短和最快的选择: 现在,这当然是一个特例。 键 和 值 都以反斜杠分隔,所有 键对 和 值 也是如此。由于必须进行两次转义,因此正则表达式也更长一些。 但是,可以将该方案推广到其他样式的字符串。 不同的分隔符 常见

  • 问题内容: 将字符串拆分为流的 最佳 方法是什么? 我看到了这些变化: 我的优先事项是: 坚固性 可读性 性能 一个完整的可编译示例: 问题答案: / 由于返回数组,因此我始终建议您使用流式处理数组的规范用法。 / 是一个 varargs 方法,它恰好接受一个数组,这是由于varargs方法是通过数组实现的,并且在将varargs引入Java以及改型为接受可变参数的现有方法时,存在兼容性方面的问题

  • 问题内容: 我需要将一个String拆分为单个字符String的数组。 例如,拆分“ cat”将得到数组“ c”,“ a”,“ t” 问题答案: 这将产生