【问题标题】:Java multiple split - keep delimitersJava 多重拆分 - 保留分隔符
【发布时间】:2012-01-10 21:52:59
【问题描述】:

我知道有人问过类似的问题,但我无法找到我正在寻找的涉及方括号的具体内容。

以下是输入:

[姓名]鲍勃
[号码] 12456703
[STREET] 任何东西 [UNIT] 32 [SUBURB] Benmore

我希望能够将此数据输入到 hasmap 中,其中括号中的文本将是键,括号中的信息将是数据。 我一直在尝试使用子字符串和拆分,但是当每行有一组以上的括号时我遇到了问题?
非常感谢

【问题讨论】:

  • 请贴出你试过的代码

标签: java regex split substring


【解决方案1】:

试试这个:

 HashMap<String, String> map = new HashMap<String, String>(); 
 Pattern regex = Pattern.compile("(\\[\\w+\\])\\s+(\\w+)");
 Matcher regexMatcher = regex.matcher(subjectString);
 while (regexMatcher.find()) {
     // matched text: regexMatcher.group(i)
     // add group 1 to key and group 2 to value of hash
     map.put(regexMatcher.group(1), regexMatcher.group(2));
 } 

【讨论】:

  • 非常感谢,这似乎是完美的!
【解决方案2】:

如果性能不是大问题(即输入文件的大小不是太大),您可以这样做:

input = input.replaceAll("\\[","\n\\[")

让您的输入每行一个括号,从而将问题减少到您已经解决的问题。

【讨论】:

  • 谢谢!现在就试试看
  • 所以问题来自更复杂的数据,例如 [NUMBER TEST] 这是一个测试
【解决方案3】:

这样的事情会起作用。

package se.wederbrand.stackoverflow.arraysorter;

import java.util.HashMap;
import java.util.Scanner;

public class ArraySorter {
    public static void main(String[] args) {
        String testString = "[NAME] Bob\n" +
                "[NUMBER] 12456703\n" +
                "[STREET] Anything [UNIT] 32 [SUBURB] Benmore ";

        HashMap<String, String> map = new HashMap<String, String>();

        Scanner scanner = new Scanner(testString);
        // this sets the delimiter to either [ or ]
        scanner.useDelimiter("[\\[\\]]");
        while (scanner.hasNext()) {
            String key = scanner.next();
            String value = scanner.next();

            // trim() removes any extra space or line breaks and leaves a clean string
            map.put(key.trim(), value.trim());
        }
    }
}

【讨论】:

    【解决方案4】:

    一个想法(尽管它比使用正则表达式效率低)是将数据拆分为每行的空白空间(如果您的数据确实在键和值之间有空白空间)。您很可能会得到某种数组。

    然后,检查令牌是否有左括号,如果有,则将其作为HashMap 键。 否则,它是一个值。

    PriorityQueue
    

    可能是存储这些值的好集合,因为您可以peek()poll() 数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-11
      • 1970-01-01
      • 2017-07-24
      • 2013-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多