如何将Kotlin中的字符串转换为可读格式?

时间:2020-05-14 10:11:43

标签: kotlin

我不知道如何在我的应用程序中以可读格式获取字符串。我的代码是:

    val allergyList = recipeItem.allergies
    allergyList.joinToString()
    var allergyString: String = ""
    for (allergy in allergyList) {
        allergyList[1]
        allergyString += " ${allergy}"
        println(allergy.toString())
    }

    holder.recipeSearchPageAllergies.text = allergyString

当我打印此纸时,我得到了过敏字符串存储空间吗?

每个结果都是这样的:

Allergy@4e8f238

如何将其“解码”为人类可读的内容?它应该说“坚果过敏”。

2 个答案:

答案 0 :(得分:0)

您可以使其更简单:

val allergiesStr = recipeItem.allergies.map { allergy ->
 // your allergy name from  allergy variable
}.joinToString(separator = " ") 

答案 1 :(得分:0)

您有一些选择。如果您可以控制Allergy源代码, 您可以覆盖toString方法:

class Allergy(val name: String) {
    override fun toString(): String = "Allergy[name=${name}]"
}

println(Allergy("flowers"))

// Allergy[name=flowers]

此外,您可以为其创建数据类。数据类默认情况下具有健全的toString。它还具有一些不错的功能,例如默认情况下equals/hashCode生成以及对组件的解构,从而使您可以在破坏中使用它:

data class Allergy(val name: String)

println(Allergy("peanuts"))

// Allergy(name=peanuts)

否则,如果您无法修改Allregy的来源,则可以为此建立扩展方法:

class Allergy(val name: String)

fun Allergy.readable() = "Allergy[name=${name}]"

println(Allergy("cats").readable())

// Allergy[name=cats]

在您的情况下,您还可以为过敏症的收藏建立扩展方法,使其具有所需的格式:

fun Collection<Allergy>.readable() = joinToString { "Allergy[name=${it.name}]" }

println(
    listOf(Allergy("cats"), Allergy("peanuts"), Allergy("flowers")).readable()
)

// Allergy[name=cats], Allergy[name=peanuts], Allergy[name=flowers]

// in your case: 
holder.recipeSearchPageAllergies.text = recipeItem.allergies.readable()

// or just 
holder.recipeSearchPageAllergies.text = recipeItem.allergies.joinToString { "Allergy[name=${it.name}]" }