Получить значение Юникода из символа в строке, используя Kotlin - PullRequest
1 голос
/ 23 мая 2019

У меня есть следующая строка на арабском языке:

عضو منذ 14 октября 2009

На первый взгляд кажется, что перед числом 14 есть пробел, но это не так. Я не смог определить, что это за персонаж. Я пробовал isEmpty, isBlank, .equals (""), == null, но ничего не возвращает true. Как я могу получить значение Unicode символа в этой позиции? Чтобы извлечь только символ, я делаю это:

memberSinceText.substring(8, 9)

1 Ответ

1 голос
/ 23 мая 2019

Если мы посмотрим на символы один за другим и напечатаем их юникод-аналог, используя:

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), вы получите символ пробела: > |

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...