Преобразование строки с неправильным форматированием в класс Scala

Мы хотели бы отформатировать следующую строку:

(1854288750,binance,live),(1854288751,bitrix,live)

к следующему классу case в Scala:

case class Account(login :String, platform: String, type: String)

Какой самый эффективный способ, так как мы не хотим использовать replaceAll

Вы имеете в виду, что хотите создать экземпляр этого класса?

user 20.12.2020 21:22
В чем разница между методом "==" и equals()
В чем разница между методом "==" и equals()
Это один из наиболее часто задаваемых вопросов новичкам на собеседовании. Давайте обсудим его на примере.
Замена символа по определенному индексу в JavaScript
Замена символа по определенному индексу в JavaScript
В JavaScript существует несколько способов заменить символ в строке по определенному индексу.
0
1
68
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать сопоставление с образцом

case class Account(login :String, platform: String, aType: String)

object Application extends App {

  //parse single string
  def parse(input: String): Option[Account] = {
    if (!input.startsWith("(") || !input.endsWith(")"))
      return None

    //split input to list using separator
    input.substring(1, input.length).split(",").toList match {
      //if format is correct return instance of your data class
      case List(login, platform, aType) => Some(Account(login, platform, aType))
      case _ => None
    }
  }

  //parse list of strings
  def parse(input: List[String]): List[Account] =
    input.map(parse).flatMap(_.toList)

  println(parse("(1854288750,binance,live)"))
  println(parse("(1854288751,bitrix,live)"))

  val input: List[String] = List("(1854288750,binance,live)", "(1854288751,bitrix,live)", "abc",
    "(1854288750,binance,live", "1854288750,binance,live)")
  //two-elements list
  println(parse(input))
}

Другие вопросы по теме