Scala字符串处理常用函数

来源:互联网 发布:sql select 两个字段 编辑:程序博客网 时间:2024/05/21 06:53

AgiString.scala

import java.io._import java.nio.channels._import java.nio._import java.net.{ URLEncoder, URLDecoder }import com.spreada.utils.chinese.ZHConverterimport scala.collection.mutable.HashMapcase 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.Loggertrait 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

0 0
原创粉丝点击