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

#string #scala

#строка #scala

Вопрос:

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

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

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

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

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

Комментарии:

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))
}