Scala字符串处理常用函数

AgiString.scala

import java.io._
import java.nio.channels._
import java.nio._
import java.net.{ URLEncoder, URLDecoder }
import com.spreada.utils.chinese.ZHConverter
import scala.collection.mutable.HashMap

case class AgiString(value : String) {

  private val base64encoder = new sun.misc.BASE64Encoder
  private val base64decoder = new sun.misc.BASE64Decoder

  private val desRegister = HashMap[String, Des]()
  private val systemEncode = System.getProperty("file.encoding")

  private def trueIndexOf(index : Int) : Int = {
    val length = value.length
    if (index < 0)
      index + length
    else if (index > length)
      index - length
    else
      index
  }

  // 默认的urlencode按照UTF8
  def encode : String = URLEncoder.encode(value, "UTF8")
  def encode(enc : String) : String = URLEncoder.encode(value, enc)
  def decode : String = URLDecoder.decode(value, "UTF8")
  def decode(enc : String) : String = URLDecoder.decode(value, enc)
  // 根据系统默认的编码进行encode,用于gui开发使用
  def encodeSys : String = URLEncoder.encode(value, systemEncode)
  def decodeSys : String = URLDecoder.decode(value, systemEncode)

  def base64encode : String = base64encoder.encode(value.getBytes)
  def base64decode : String = new String(base64decoder.decodeBuffer(value))

  // 简繁转换
  // 基于ZhConverter:http://code.google.com/p/java-zhconverter/
  def toTraditional : String = ZHConverter.convert(value, ZHConverter.TRADITIONAL)
  def toSimplified : String = ZHConverter.convert(value, ZHConverter.SIMPLIFIED)

  // 获取DesUtil实例
  private def getDesUtil(key : String) : Des = {
    if (!desRegister.contains(key))
      desRegister(key) = new Des(key)
    desRegister(key)
  }

  // Des加密
  def desEncrypt(key : String) : String = {
    new String(getDesUtil(key).DesEncrypt(value.getBytes, 1))
  }
  def desEncryptBase64(key : String) : String = {
    base64encoder.encode(getDesUtil(key).DesEncrypt(value.getBytes, 1))
  }

  // Des解密
  def desDecrypt(key : String) : String = new String(getDesUtil(key).DesEncrypt(new String(value.getBytes, "utf8").getBytes, 0))
  def desDecryptBase64(key : String) : String = new String(getDesUtil(key).DesEncrypt(base64decoder.decodeBuffer(value), 0))

  // 驼峰命名
  def toCamelCase : String = toCamelCase(true)
  def toCamelCase(isFirstUpper : Boolean = true) : String = {
    val b = new StringBuilder
    var toUpperPos = -1
    for (i <- 0.to(value.length - 1)) {
      if (!value(i).isLetterOrDigit)
        toUpperPos = i + 1
      else
        b.append(if (toUpperPos == i) value(i).toUpperCase else value(i))
    }
    val first = b.charAt(0)
    if (isFirstUpper)
      if (!first.isUpperCase)
        b.setCharAt(0, first.toUpperCase)
      else if (!first.isLowerCase)
        b.setCharAt(0, first.toLowerCase)
    b.mkString
  }

  def toUnCamcelCase(implicit sp : String = "_") : String = {
    val b = new StringBuilder
    var pos = -1
    value.foreach { char =>
      pos += 1
      if (char.isLetterOrDigit) {
        if (char.isUpperCase)
          (if (pos == 0) b else b.append(sp)).append(char.toLowerCase)
        else
          b.append(char)
      }
    }
    b.mkString
  }

  // 指定位置大写
  def toUpperCase(index : Int) : String = {
    val trueIndex = trueIndexOf(index)
    val char = value.charAt(trueIndex)
    if (!char.isUpper) {
      value.updated(trueIndex, char.toUpperCase).mkString
    } else
      value
  }
  // 指定位置小写
  def toLowerCase(index : Int) : String = {
    val trueIndex = trueIndexOf(index)
    val char = value.charAt(trueIndex)
    if (!char.isLower) {
      value.updated(trueIndex, char.toLowerCase).mkString
    } else
      value
  }

  def dump(file : File) : Boolean = {
    try {
      val opChannel = new FileOutputStream(file).getChannel
      opChannel.write(ByteBuffer.wrap(value.getBytes))
      opChannel.close
      true
    } catch {
      case _ =>
        System.err.println("Can't dump I/O error!")
        false
    }
  }
  def dump(name : String) : Boolean = dump(new File(name))

  lazy private val md5handle = java.security.MessageDigest.getInstance("MD5")
  private val hexDigits = Array[Char]('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f')

  def md5 : String = {
    val encrypt = md5handle.digest(value.getBytes)
    val b = new StringBuilder(32)
    for (i <- 0.to(15)) {
      b.append(hexDigits(encrypt(i) >>> 4 & 0xf)).append(hexDigits(encrypt(i) & 0xf))
    }
    b.mkString
  }

  def jsonDecode : JsValue = JsValue.fromString(value)

  def toEventName : String = {
    val name = value.toLowerCase()
    if (name.indexOf("on") == 0)
      name.replace("on", "")
    else
      name
  }
}

Base.scala

import com.agiers.util._
import org.apache.log4j.Logger

trait Base {
  // String extends
  implicit def AgiStringExtend(value: String) = AgiString(value)

  def log = Logger.getLogger(getClass)

  def currentTime(isMillis: Boolean): Long = {
    if (isMillis)
      System.currentTimeMillis
    else
      currentTime
  }

  def currentTime(): Long = {
    System.currentTimeMillis
  }

  def random(max: Int): Long = {
    (Math.random * (max + 1)).toLong
// (randomSeed.nextInt >>> 1) & max
  }

  def random(min: Int, max: Int): Long = {
    min + random(max - min)
  }
}

转自:http://blog.chinaunix.net/uid-25885064-id-3430852.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值