Можно ли использовать символы двойной кавычки как часть ключа hashmap? - PullRequest
2 голосов
/ 14 января 2011

В качестве ключа хеш-карты у меня будет строка типа "hello" world. Ключ на самом деле из пользовательского ввода, поэтому возможно иметь что-то подобное в качестве ключа. Это нормально?

Ответы [ 4 ]

5 голосов
/ 14 января 2011

Абсолютно. Символ двойной кавычки является только «особенным» в отношении исходного кода Java. Вы даже можете избежать этого в самой Java:

HashMap<String, String> map = new HashMap<String, String>();
map.put("foo\"bar", "value");
System.out.println(map.get("foo\"bar")); // Will print value

Здесь ключом является строка foo "- обратный слеш предназначен только для экранирования строкового литерала.

3 голосов
/ 14 января 2011

Да, конечно.Даже 0-символ, который часто используется в качестве символа конца строки в C, в Java является нормой, поэтому на самом деле ограничений нет.

2 голосов
/ 14 января 2011

Конечно.Если ключ имеет тип String, тогда разрешены все символы.Ограничений нет.

Просто напоминание: если пользователь введет:

 Jack"o"Lantern

, тогда литерал Java будет

 "Jack\"o\"Lantern"
1 голос
/ 14 января 2011

Как говорили другие, строки в java могут содержать все символы Юникода, поэтому для ключей в хэш-карте все в порядке.

Но будьте осторожны при создании запросов SQL, запросов http или аналогичныхиспользуя строки, которые содержат нефильтрованный пользовательский ввод - тогда ваше программное обеспечение может быть открыто для SQL-инъекций или атак с использованием межсайтовых сценариев.В этом случае поможет использование таких механизмов, как подготовленные операторы вместо конкатенации строк.

...