Некоторые проблемы с преобразованием массива char в строку - PullRequest
1 голос
/ 05 июля 2019

Добрый день, я начинающий, и у меня возникла проблема:

Я хочу преобразовать это "ромка" или это "роМка" в "Ромка", используя этот код.Мой код в порядке.У меня проблема с toString().

Переписать строку, используя только один первый верхний символ.Проблема с преобразованием charArray в String

var name = "ромка"
var charName = name.toLowerCase().toCharArray()
charName[0] = charName[0].toUpperCase()

name = charName.toString()

Результаты:

charName: {'Р', 'о', 'м', 'к', 'а'}

name == "[C@93ec54"

Скриншот

Ответы [ 3 ]

3 голосов
/ 05 июля 2019
var name = "ромка"
val result = name.toLowerCase().capitalize()
2 голосов
/ 05 июля 2019
    var name = "ромка"
    var charName = name.toLowerCase().toCharArray()
    charName[0] = charName[0].toUpperCase()

    name = String(charName)
1 голос
/ 06 июля 2019

Причина, по которой toString() работает таким образом, заключается в том, что во время выполнения массивы Kotlin представлены типами массивов JVM, поэтому, например, CharArray равно char[] во время выполнения.Эти типы JVM не предоставляют значимых реализаций методов toString, equals и hashCode.

Вместо этого Kotlin предоставляет функции расширения contentToString, contentEquals и contentHashCode для массивов.Эти функции реализованы так, как если бы массив был списком, например, contentToString вернул бы [Р, о, м, к, а] для массива из вопроса.

Однако, если вы хотите объединить все символы в массиве char встрока, вы должны использовать другую функцию: либо String(CharArray), доступную в Kotlin / JVM, либо экспериментальное расширение CharArray.concatToString(), доступное для всех платформ, начиная с Kotlin 1.3.40.

Наконец, если ваша задача состоит в том, чтобы использовать заглавные буквыпервый символ, затем функция capitalize сделает все эти манипуляции за вас, как @Francesc предложил в своем ответе .

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