我知道类似的问题已被问到,但我还没有找到具体的东西,我正在寻找涉及方括号。Java多重分割 - 保留分隔符
下面是输入:
[NAME]鲍勃
[NUMBER] 12456703
[STREET]任何[UNIT] 32 [郊区]本摩尔
我希望能够将这些数据输入到一个hasmap中,其中括号中的文本将成为关键字,括号中的信息将成为数据。 我一直在尝试使用子字符串和拆分,但当每行有一组以上的括号时,我遇到了问题?
非常感谢
我知道类似的问题已被问到,但我还没有找到具体的东西,我正在寻找涉及方括号。Java多重分割 - 保留分隔符
下面是输入:
[NAME]鲍勃
[NUMBER] 12456703
[STREET]任何[UNIT] 32 [郊区]本摩尔
我希望能够将这些数据输入到一个hasmap中,其中括号中的文本将成为关键字,括号中的信息将成为数据。 我一直在尝试使用子字符串和拆分,但当每行有一组以上的括号时,我遇到了问题?
非常感谢
试试这个:
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));
}
非常感谢,这似乎是完美的! –
一个想法(尽管它比使用正则表达式效率更低)是将数据分割为每行的空白空间(如果您的数据确实在键和值之间有空白)。你很可能最终会得到某种数组。
然后,检查令牌是否带有左括号,如果是,则将其作为HashMap
键。 否则,这是一个值。
PriorityQueue
可能是一个很好的集合来存储这些值,因为你可以peek()
和poll()
数据。
这样的事情会起作用。
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());
}
}
}
如果性能是不是一个大问题(即输入文件的大小不是太大),你可以做:
input = input.replaceAll("\\[","\n\\[")
使每行输入一个括号,从而将问题减少到已解决的问题。
谢谢!现在就试试看吧 –
所以这些问题伴随着更复杂的数据,如[数字测试]这是一个测试 –
请发布你试过的代码 –