Java多重拆分 - 保留分隔符

时间:2011-12-01 18:50:14

标签: java regex split substring

我知道有类似的问题已经被问过,但是我找不到涉及方括号的具体问题。

以下是输入:

  

[NAME]鲍勃   [号码] 12456703
  [STREET]任何[UNIT] 32 [SUBURB] Benmore

我希望能够将这些数据输入到hasmap中,括号中的文本将成为键,括号中的信息将成为数据。 我一直在尝试使用子串和拆分,但是当每行有多个括号时,我遇到了问题? 非常感谢

4 个答案:

答案 0 :(得分: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());
        }
    }
}

答案 1 :(得分:3)

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

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

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

答案 2 :(得分:2)

试试这个:

 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));
 } 

答案 3 :(得分:1)

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

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

PriorityQueue

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