【发布时间】:2016-12-08 20:59:48
【问题描述】:
我正在为这个问题寻找有趣的解决方案:
String key = "1;2;3;4";
String value = "Value1;Value2;Value whitespace;"
现在';'将每个值与另一个值分开。相同的符号';'也分配密钥。
现在我想结束:
{"1" : "Value1", "2" : "Value2", "3" : "Value whitespace", "4" : null}
当然,如果值比键多,那么 null 不应该是该对的左侧(null:“Value5”)。
我使用 char 数组为这个问题做了一个非常复杂的解决方案,但它是一个包含许多案例和东西的大型 FOR。(它是 O(n))。所以我很想看到一个正则表达式或子字符串解决方案或不包含大循环的东西。
编辑: 我的解决方案:
private List<ExampleObject> getExampleObjects(String key , String value) {
// s
if (key == null || value == null) {
return new ArrayList<ExampleObject>();
}
List<ExampleObject> exampleObjects = new ArrayList<ExampleObject>();
char[] keyToCharArray = key.toCharArray();
char[] valueToCharArray = value.toCharArray();
StringBuilder name = new StringBuilder();
StringBuilder value = new StringBuilder();
boolean nameCompleted = false;
boolean valueCompleted = false;
for (int i = 0, j = 0; i < keyToCharArray.length || j < valueToCharArray.length;) {
if (!nameCompleted) {
char a = ' ';
try{
a = keyToCharArray[i];
} catch(Exception e){
a = ';';
// throw : VALES and key not match. More key then value
//throw(e);
}
if (a == ';' ) {
nameCompleted = true;
} else if (!(i + 1 < keyToCharArray.length)){
name.append(a);
nameCompleted = true;
} else {
name.append(a);
}
i++;
}
if (!valueCompleted) {
char a = ' ';
try{
a = valueToCharArray[j];
} catch(Exception e){
a = ';';
// throw : VALES and key not match. More value then key
//throw(e);
}
if (a == ';') {
valueCompleted = true;
} else if(!(j + 1 < valueToCharArray.length)) {
value.append(a);
valueCompleted = true;
} else {
value.append(a);
}
j++;
}
if (nameCompleted && valueCompleted) {
exampleObjects.add(new ExampleObject(name.toString(), value.toString()));
name.setLength(0);
value.setLength(0);
nameCompleted = false;
valueCompleted = false;
}
}
return exampleObjects;
}
其中 ExampleObject.class 有字段 key 和 value。
【问题讨论】:
-
抱歉,我们希望您提供一些代码;不仅是要求。你知道,写一个使用 indexOf 和 substring 操作的 for 循环不会太难;或者干脆分开;也应该很好用。
-
你希望这到底是什么数据结构?如果您有多个映射到
null的值,则它不是Map。一般来说,这只是拆分字符串并循环遍历结果数组的问题,但这取决于您希望获得的结果。 -
井地图本来可以的。我对正则表达式更好奇,因为我不擅长编写包括正则表达式在内的解决方案,所以只是想看看它会是什么样子。
-
我不相信没有某种循环就可以做到这一点。但如果事实证明它是可能的,那么它只能是最复杂和最讨厌的代码。我不禁想到这个问题会更适合编程代码高尔夫网站。
-
好的,看来您的源代码会创建一个配对列表。这是一个合法的选择。你知道
String中的split方法吗?
标签: java string dictionary substring