Если мы посмотрим на символы один за другим и напечатаем их юникод-аналог, используя:
val memberSinceText = "عضو منذ 14 نوفمبر، 2009"
memberSinceText.toCharArray()
.forEachIndexed { pos, c ->
println("$pos. $c -> ${String.format("\\%04x", c.toInt())}")
}
, мы получим вывод, подобный следующему (адаптировал его немного и добавил несколько комментариев; из-зазначения в той же строке не так просто копировать и вставлять):
0. ع -> \0639
1. ض -> \0636
2. و -> \0648
3. -> \0020 // Space
4. م -> \0645
5. ن -> \0646
6. ذ -> \0630
7. -> \0020 // Space
8. 200f\ <- // actually omitting the symbol here due to copy&paste-problems
9. 1 -> \0031
10. 4 -> \0034
11. -> \0020 // Space
12. ن -> \0646
13. و -> \0648
14. ف -> \0641
15. م -> \0645
16. ب -> \0628
17. ر -> \0631
18. ، -> \060c
19. -> \0020 // Space
20. 2 -> \0032
21. 0 -> \0030
22. 0 -> \0030
23. 9 -> \0039
Так что на самом деле ... есть пробел до и после 14
, но есть также некоторые другие специальные символы в позиции8. Если мы посмотрим, что это в принципе, мы получим (после применения нашего видения RTL): \u200f
, что в основном означает метку справа налево.
Печать этого символа отдельно с некоторым контекстом:
memberSinceText.substring(8, 9).also {
println(">$it|")
}
напечатает: |<
(обратите внимание на направление).Однако, напечатав substring(7,8)
, вы получите символ пробела: > |