我有这样的数据,标题是变量的名称,下面是字符串数据(请注意数据有时可能不同)
TITLE1
abcd
TITLE2
abcde
TITLE3
acd,sdssds!@#@$#$#%$%$^&**()aas
现在,我想把这三个发送到java并从中创建一个链接地图我像这样做了
JAVASCRIPT
var string = "TITLE1=abcd, TITLE2=abcde, TITLE3=acd,sdssds!@#@$#$#%$%$^&**()aas"
在Java中作为
使用JAVA
LinkedHashMap <String, String> selectedCheckBoxMap = new LinkedHashMap <String, String> ();
String[] pairs = selectedCheckBoxTokens.split (",");
for (int i = 0; i < pairs.length; i++)
{
String pair = pairs[i];
String[] keyValue = pair.split ("=");
selectedCheckBoxMap.put (keyValue[0], keyValue[1]);
}
但是,由于TITLE3中已经有字符',',
然后我用这个字符代替","作为分隔符"‡",但这不是一个好方法。
我该怎么办?我应该在javascript中更改为hashmap吗?但是如何将hashmap从javascript直接转换为JAVA ?或者我应该使用其他分隔符吗?
分隔符应该是我们不能输入的字符,或者在文本中遇到的字符。
谢谢,
艾登
如果你的数据是常规的,你可以用","来代替。如果你的值集中有空格,那么你需要标记你的数据值…请使用单/双引号或其他独特的标记。
构建一个JSON对象然后交付它可能是一个更健壮的解决方案。
如果使用JSON:
var s = {};
s["TITLE1"] = "skladjdklsajdsla";
s["TITLE2"] = "*&^&^%&*,,()*&";
s["TITLE3"] = "acd,sdssds!@#@$#$#%$%$^&**()aas";
下面的代码将创建一个Java Script对象:
Object {
TITLE1="skladjdklsajdsla",
TITLE2="*&^&^%&*,,()*&",
TITLE3="acd,sdssds!@#@$#$#%$%$^&**()aas"
}
你可以使用Java的JSON库来解析对象:http://www.oracle.com/technetwork/articles/java/json - 1973242. - html
参见:如何在Java中解析JSON
JSON标准:http://www.json.org/
在生成要发送的字符串时,通过将值中的逗号和等号替换为%2C和%3D等内容来转义它们然后在服务器端执行
selectedCheckBoxMap.put (keyValue[0], keyValue[1].replace("%2C",",").replace("%3D","="));
使用普通字符作为分隔符是错误的。您必须转义所使用的每个分隔符,然后自己解析字符串。这意味着,您必须在每个条目上调用value.replace(/([\=,])/g, '\$1')
,然后将其附加到您的数据字符串中。
即使我建议你使用JSON,正如Alzoid所建议的,这里是一个未经测试的实现,你可以用来解码输入(假设''是你的转义字符):
boolean escaped = false;
boolean waitingForKey = true;
String key = "";
String current = "";
for (int i = 0; i < data.length(); i++) {
char character = data.charAt(i);
if (escaped) {
current += character;
escaped = false;
continue;
}
if (waitingForKey && Character.isWhitespace(character)) {
continue;
} else if (waitingForKey) {
waitingForKey = false;
}
switch (character) {
case '\':
escaped = true;
break;
case '=':
key = current;
current = "";
break;
case ',':
map.put(key, current);
current = "";
key = "";
waitingForKey = true;
break;
default:
current += character;
}
}
if (!data.isEmpty()) {
map.put(key, current);
}