String 如何在kotlin中将字符串转换为实体

String 如何在kotlin中将字符串转换为实体,string,kotlin,String,Kotlin,我有一根像贝娄一样的绳子: str=Testa=10,b=100,c=1.0,d=2.0 测试实体为: data class Test( val a: int = 0, val b: Int = 0, val c: Double = 0.0, val d: Double = 0.0 ) 如何将字符串str转换为测试实体 谢谢 正则表达式在这里似乎是一个合适的选择: data class Test(val a: Int = 0, val b: Int = 0, val c

我有一根像贝娄一样的绳子:

str=Testa=10,b=100,c=1.0,d=2.0

测试实体为:

data class Test(
   val a: int = 0,
   val b: Int = 0,
   val c: Double = 0.0,
   val d: Double = 0.0
)
如何将字符串str转换为测试实体


谢谢

正则表达式在这里似乎是一个合适的选择:

data class Test(val a: Int = 0, val b: Int = 0, val c: Double = 0.0, val d: Double = 0.0)
fun main() {
    val str = "Test(a=10, b=100, c=1.0, d=2.0)"
    print(getTest(str))
}
fun getTest(str: String): Test {
    val regex = """Test\(a=(.+), b=(.+), c=(.+), d=(.+)\)""".toRegex()
    val matches = regex.find(str)
    return matches?.groupValues?.let { groups ->
        Test(groups[1].toInt(), groups[2].toInt(), groups[3].toDouble(), groups[4].toDouble())
    } ?: Test()
}

如果您将对象存储为字符串来实例化它们,请考虑序列化。看看。

正则表达式在这里似乎是一个合适的选择:

data class Test(val a: Int = 0, val b: Int = 0, val c: Double = 0.0, val d: Double = 0.0)
fun main() {
    val str = "Test(a=10, b=100, c=1.0, d=2.0)"
    print(getTest(str))
}
fun getTest(str: String): Test {
    val regex = """Test\(a=(.+), b=(.+), c=(.+), d=(.+)\)""".toRegex()
    val matches = regex.find(str)
    return matches?.groupValues?.let { groups ->
        Test(groups[1].toInt(), groups[2].toInt(), groups[3].toDouble(), groups[4].toDouble())
    } ?: Test()
}

如果您将对象存储为字符串来实例化它们,请考虑序列化。看一看。

它有效

data class Test(
        val a: Int = 0,
        val b: Int = 0,
        val c: Double = 0.0,
        val d: Double = 0.0
)


fun main() {
    val str = "Test(a=10, b=100, c=1.0, d=2.0)"
    val numbers =  "([\\d.]+)".toRegex().findAll(str).map { it.value }.toList()
    val test = Test(
            numbers[0].toInt(), 
            numbers[1].toInt(), 
            numbers[2].toDouble(), 
            numbers[3].toDouble())
}
它起作用了

data class Test(
        val a: Int = 0,
        val b: Int = 0,
        val c: Double = 0.0,
        val d: Double = 0.0
)


fun main() {
    val str = "Test(a=10, b=100, c=1.0, d=2.0)"
    val numbers =  "([\\d.]+)".toRegex().findAll(str).map { it.value }.toList()
    val test = Test(
            numbers[0].toInt(), 
            numbers[1].toInt(), 
            numbers[2].toDouble(), 
            numbers[3].toDouble())
}

@TheBlues谢谢你!请记住接受能解决您问题的答案。@TheBlues谢谢!请记住接受解决问题的答案。