最安全的分隔符或转换从javascript hashmap到java链接映射



我有这样的数据,标题是变量的名称,下面是字符串数据(请注意数据有时可能不同)

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

最新更新