Исключение в скале / Java - PullRequest
       5

Исключение в скале / Java

0 голосов
/ 27 сентября 2018

Я новичок в программировании на Scala и на языках JVM.Я хочу преобразовать строку в yyyy-MM-dd в формат даты следующим образом:

import java.text.SimpleDateFormat
import java.util.Date

val format = new SimpleDateFormat("yyyy-MM-dd")

def strTodate(stringDate: String): Date = {
    format.parse(stringDate)
  }

Как я могу позаботиться об исключении в случае, если strTodate вызывается для неправильно отформатированной строки, такой как strTodate ("18/ 03/03 ")?Я хотел бы обработать исключение, а также напечатать строку

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Scala имеет три способа обработки ошибок.

  1. Option: имеет None или Some
  2. Try: имеет Success или Failure
  3. Either: слева или справа.Right - всегда правильный результат.

Я предпочитаю Either из всех, и вот как вы можете сделать это как Either[String, Date], где Left - String, Right - Date.

Пример,

import java.text.SimpleDateFormat
import java.util.Date
import scala.util.Try
import scala.util.{Failure, Success}

val format = new SimpleDateFormat("yyyy-MM-dd")

def strTodate(stringDate: String): Either[String, Date] = {
  Try {
    format.parse(stringDate)
  } match {
    case Success(s) => Right(s)
    case Failure(e: ParseException) => Left(s"bad format: $stringDate")
    case Failure(e: Throwable) => Left(s"Unknown error formatting : $stringDate")
  }
}

val date1 = strTodate("2018-09-26")
println(date1) // Right(Wed Sep 26 00:00:00 PDT 2018)

val date2 = strTodate("2018/09/26")
println(date2) // Left(bad format: 2018/09/26)
0 голосов
/ 27 сентября 2018

Обработка исключений:

import java.io.IOException
import java.text.SimpleDateFormat
import java.util.Date

object app  {
  val format = new SimpleDateFormat("yyyy-MM-dd")

  def strTodate(stringDate: String): Either[Exception, Date] = {
    try {
      Right(format.parse(stringDate))
    } catch {
      case ioException : IOException =>
        Left(ioException)
      case e: Exception =>
        Left(e)
    }
  }

  def main(args: Array[String]) : Unit =
    strTodate("2018-02-02") match {
      case Right(date) => println(date)
      case Left(err) => println(err.getMessage)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...