`

Scala字符串处理常用函数

 
阅读更多

method:

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:

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)

  }

}

 

分享到:
评论

相关推荐

    Scala基础(8)函数定义

    字面量包括整数字面量、浮点数字字面量、布尔型字面量、字符型字面量、字符串字面量和符号字面量、函数字面量和元组字面量。 函数字面量:我们可以像定义变量那样去定义一个函数,由此导致的结果就是函数也会和其他...

    flink自定义函数-字符串BASE64解码,字符编码:HEX(16进制,不编码)

    2. 对字符串进行BASE64解码,字符串内容是十六进制,字符不编码 3. flinksql进行调用 4. 自定义函数调用过程 4.1. 编译打包代码,生成的jar复制到flink安装目录下的lib目录。 例如:/flink/lib 4.2. flinksql脚本...

    scala-nameof:在编译时获取变量,函数,类成员的名称,或以字符串形式输入类型!

    scala-nameof:在编译时获取变量,函数,类成员的名称,或以字符串形式输入类型!

    scala编程中文pdf

    第1章字符串. 11 第2章数值39 第3章控制结构.60 第4章类和属性.103 第5章方法147 第6章对象170 第7章包和导入.190 第8章特质200 第9章函数式编程214 第10 章集合242 第11 章列表、数组、映射、集及其他315 第12 章...

    使用Scala设计WordCount程序

    使用Scala设计WordCount程序 软件环境: hadoop-2.6.5.tar.gz spark-1.6.2-bin-hadoop2.6.tgz scala-2.10.4.gz scala-SDK-4.0.0-vfinal-2. 11-linux.gtk.x86_64.tar.gz

    Scala快速入门(适合为学Spark学习Scala的同学)

    scala安装使用、scala基础、scala方法与函数、scala tuple/集合/list/字符串/set/map、、trait特性、模式匹配、隐式转换、样例类、actorModal

    scala从入门到精通技术教学视频

    14.列表的常用操作之转换字符串 15.列表的常用操作之求并集,交集,差集 16.创建不可变集 17.不可变集的常见操作 18.创建可变集 19.创建不可变Map 20.创建可变Map 21.Map的基本操作 22.使用迭代器遍历集合 23...

    Scala程序设计(第2版)

    2.8.5 字符串字面量 48 2.8.6 符号字面量 50 2.8.7 函数字面量 50 2.8.8 元组字面量 50 2.9 Option、Some 和None:避免使用null 52 2.10 封闭类的继承 53 2.11 用文件和名空间组织代码 54 2.12...

    MyScala.rar

    Scala _02基础,Scala _03方法与函数,Scala _04Scala字符串,Scala _05集合_数组,Scala _07trait特性,Scala _08模式匹配match&偏函数,Scala _09样例类(case classes)&隐式转换,Scala _10Actor Model

    Scala详细总结(精辟版++).docx

    函数式编程有两个指导思想:①函数是头等值,也就是说函数也是值,并且和其他类型(如整数、字符串等)处于同一地位,函数可以被当作参数传递,也可以被当作返回值返回,还可以在函数中定义函数等等;②程序的操作...

    Scala详细总结(精辟版++)

    字符串 4 变量 4 标识符 5 操作符 5 块表达式与赋值 5 控制结构 6 函数 8 类(class)和对象(object) 14 抽象类和抽象成员 17 继承与覆盖(override) 18 特质(trait) 19 显式类型转换 20 隐式转换、隐式参数 20 类型...

    实现一个交互式的计算器

    可以有两种做法:1、输入运算的字符串, 给出结果;2、仿照真实的计算器,不能简单地计算上一步的加减结果,必须根据下面的输入计算 提示:输入字符串必须进行分析;如果仿照真实的计算器,需要使用数据暂存的结构

    DataFrame:通过SparkSql将scala类转为DataFrame的方法

    今天小编就为大家分享一篇DataFrame:通过SparkSql将scala类转为DataFrame的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    spark-stringmetric:Spark函数运行流行的语音和字符串匹配算法

    Spark的字符串相似性函数和语音算法。 见如果你使用PySpark。 项目设置 更新您的build.sbt文件以导入库。 libraryDependencies += "org.apache.commons" % "commons-text" % "1.1" // Spark 3 ...

    Scala编程实战.rar

    scala基础语法,字符串,数值,控制结构,类和属性,方法,对象,包和导入,特质,函数式编程,集合。列表,数组,映射,文件和进程,Actors和并发,命令行执行,

    lambda-scala:Lambda微积分在Scala中的实现

    Expr :: =名称(名称:字符串)| Lmbd(参数:Expr,主体:Expr)| Appl(fn:Expr,arg:Expr) 例子: 名称(“ x”) //-&gt;“ x” Lmbd(Name(“ y”),Name(“ y”)) //-&gt;“λy.y” Lmbd(Name(“ f”),...

    scala-nespresso:Nespresso 的 Scala 演示

    字符串插值 具有隐式值类的开闭原则 类型类 用火柴测试 宏 ansi-内插器 莫基托 使用 macwire 进行依赖注入 Scala路线图 每个主题都包含在一个小型游乐场项目中。 这个想法是让你在演示过程中开始,这样你就可以自己...

    lighty:ES5 的匿名函数组合器

    例子ex 1:拆分一个字符串,然后修剪每个字符串,然后过滤非空字符串。 在 vanilla ES5 中是如何做的: var urls = value . split ( "\n" ) . map ( function ( s ) { return s . trim ( ) ; } ) . filter ( ...

    scalatour:麻省理工学院 HSSP 课程

    Scala之旅 MIT Spring HSSP 2015 Language Spec 课程,勇敢者: : 教学大纲 第 1 周 - 基础知识 Scala 的基本前提:类 Haskell 的函数式编程与类 Java 的面向对象... 字符串插值 异常处理 第 2 周 - 面向对象编程 班级

    fizzbuzz-scala-refucktoring

    规则关键是要与TDD一起使用以创建一个经过测试的函数,并根据以下规则获取一个Int并返回一个String : 输入为3的倍数,应返回“嘶嘶声” 输入为5的倍数,应返回“嗡嗡声” 输入的3和5的倍数,应返回“ fizzbuzz” ...

Global site tag (gtag.js) - Google Analytics