我知道有类似的问题已经被问过,但是我找不到涉及方括号的具体问题。
以下是输入:
[NAME]鲍勃 [号码] 12456703
[STREET]任何[UNIT] 32 [SUBURB] Benmore
我希望能够将这些数据输入到hasmap中,括号中的文本将成为键,括号中的信息将成为数据。 我一直在尝试使用子串和拆分,但是当每行有多个括号时,我遇到了问题? 非常感谢
答案 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()
数据。