Поддержка Unicode в sed
не определена. Вам может быть лучше использовать командную строку perl
:
echo "abcABC123" | perl -CS -pe 's/[\x{FF21}-\x{FF3B}]+//g'
abc123
Важно использовать флаги -CS
здесь, чтобы иметь возможность получать правильные кодировки UTF8 для ввода / вывода / ошибки.
SimpleDateFormat
и DateFormat
(SimpleDateFormat
суперкласс), а также Format
(DateFormat
суперкласс) реализовано toString()
, поэтому toString()
из класса Object
действительно выполняется, код которого is:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
Теперь генерируется hashCode SimpleDateFormat
:
public int hashCode()
{
return pattern.hashCode();
// just enough fields for a reasonable distribution
}
Это означает, что если вы создадите многочисленные экземпляры SimpleDateFormat
с тем же pattern
, например в вашем случае они будут иметь одинаковый hashCode
, и, следовательно, toString()
вернет то же самое для этих экземпляров.
Кроме того, поскольку он был замечен rixmath, экземпляры SimpleDateFormat
с тем же pattern
также будет равным.
Это разные экземпляры, попробуйте
DateFormat d1 = new SimpleDateFormat("ddMMyyyy");
DateFormat d2 = new SimpleDateFormat("ddMMyyyy");
System.out.println(d1 == d2);
, он печатает
false
как для того же java.text.SimpleDateFormat@c5bfbc60
, они основаны на имени класса и хэш-коде. В соответствии с Object.hashCode API он не обязательно возвращает отдельные значения для отдельных объектов
SimpleDateFormat
фактически реализует hashCode
, возвращая хэш-код шаблона.
Вы можете убедиться, что на самом деле существуют различные объекты с помощью System.identityHashCode()
:
System.out.println("d1 = " + d1 + " / " + System.identityHashCode(d1));
System.out.println("d2 = " + d2 + " / " + System.identityHashCode(d2));
System.out.println("d3 = " + d3 + " / " + System.identityHashCode(d3));
Это напечатает 3 разных значения.