Есть ли невидимый персонаж, который не считается пробелом?
Я работаю с существующим фреймворком, где мне нужно установить некоторый атрибут в пустую, если выполняются некоторые условия. К сожалению, фреймворк не позволяет задавать только значение whitespace для значения атрибута. В частности, он выполняет
!(org.apache.commons.lang.StringUtils.isBlank(value))
проверьте значение
Можно ли как-то обойти это и установить значение, которое выглядит пустым/невидимым для глаза, но не считается пробелом?
Я использую тире "-" прямо сейчас, но я думаю, было бы интересно узнать, возможно ли это.
Ответы
Ответ 1
Попробуйте Unicode Character 'ZERO WIDTH SPACE' (U + 200B). Это не пробел согласно WP: пробел # Юникод
Код StringUtils.isBlank не беспокоит его:
public static boolean isBlank(String str) {
int strLen;
if (str == null || (strLen = str.length()) == 0) {
return true;
}
for (int i = 0; i < strLen; i++) {
if ((Character.isWhitespace(str.charAt(i)) == false)) {
return false;
}
}
return true;
}
Ответ 2
Этот персонаж из Юникода 'ZERO WIDTH SPACE' (U + 200B), которым поделился Майкл Конецка, не работал для меня, но нашел другой, который сработал:
Это на самом деле идентифицируется как комбинация
U+200F : RIGHT-TO-LEFT MARK [RLM]
U+200F : RIGHT-TO-LEFT MARK [RLM]
U+200E : LEFT-TO-RIGHT MARK [LRM]
U+0020 : SPACE [SP]
U+200E : LEFT-TO-RIGHT MARK [LRM]
и значение ASCII составляет 8207
' '.charCodeAt(0) // 8207
Source: http://emptycharacter.com/