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) } }
相关推荐
这段Java代码会迭代字符串中的每个字符,如果字符是繁体的,则打印出来。`isTraditionalChinese`方法需要具体实现,可以借助第三方库,如`OpenCC4j`或`Unihan Database`。 **使用第三方库:** 为了更准确和高效地...
Scala 正则表达式是 Scala 语言中的一种强大工具,用于模式匹配和字符串处理。在 Scala 中,正则表达式可以通过两种方式创建:通过 `r` 方法直接将字符串转换成正则表达式对象,或者直接显式地调用 `Regex` 构造函数...
- **知识点概述**:Scala中的字符串处理提供了多种方法来访问和操作字符串。 - **详细解析**: - 使用括号操作符或字符串方法来获取字符。 - **"Hello"(0)**:获取字符串的第一个字符。 - **"Hello".reverse(0)*...
字面量包括整数字面量、浮点数字字面量、布尔型字面量、字符型字面量、字符串字面量和符号字面量、函数字面量和元组字面量。 函数字面量:我们可以像定义变量那样去定义一个函数,由此导致的结果就是函数也会和其他...
5. **处理重复**:如果需要避免字符串中的字符重复,可以在生成每个字符后检查已选字符集合,确保新字符未被使用过。 在给定的压缩包文件中,"RandStringsc.exe"可能是一个可执行文件,用户运行后可以直接使用随机...
通过使用 `scala-nameof`,开发者可以避免在代码中硬编码字符串,从而减少潜在的错误和提高代码的可维护性。 `scala-nameof` 的核心概念是 `nameof` 关键字,它允许你在编译时获取一个表达式的名称。例如,你可以...
2. 对字符串进行BASE64解码,字符串内容是十六进制,字符不编码 3. flinksql进行调用 4. 自定义函数调用过程 4.1. 编译打包代码,生成的jar复制到flink安装目录下的lib目录。 例如:/flink/lib 4.2. flinksql脚本...
本书包含的主题广泛,涵盖了字符串处理、数值计算、集合操作、模式匹配、函数式编程以及并发编程等多个方面。例如,书中讲解了如何测试字符串相等性、创建多行字符串、分割字符串、将变量替换到字符串中、逐字符处理...
这里,第三个定义的`sayHello`就是一个过程,尽管它的计算结果是一个字符串,但返回类型被明确指定为Unit,因此实际上不会返回任何值。 接下来,Scala中的lazy值是一个非常重要的特性。lazy关键字允许我们将变量...
- 数据科学与大数据处理:由于其函数式的特性以及高性能的特性,Scala被广泛应用于大规模数据处理场景,如Apache Spark。 - Web应用开发:许多现代Web框架都支持Scala,如Play框架。 - 并发与分布式系统:Scala...
`println`函数用于打印字符串到控制台。 Scala还支持高阶函数、类型推断、柯里化、不可变数据结构等特性,这些都是函数式编程的核心元素。此外,它可以与Java代码无缝集成,这意味着你可以利用已有的Java库和框架。...
Scala 是一种多范式的编程... - 处理给定的字符串列表,统计单词出现的次数。 20. **map 和 foreach 的区别**: - `map` 返回一个新的集合,应用函数到每个元素上。 - `foreach` 不返回值,只遍历并执行给定的操作。
此外,Scala还支持内联字符串插值,使用`$`符号可以轻松地在字符串中插入变量值。 #### 变量 Scala中有两种类型的变量:`val`和`var`。`val`表示不可变的变量,一旦赋值后就不能改变;而`var`表示可变的变量,可以...
例如,当使用`replace`方法处理字符串时,Scala会返回一个新的字符串而非改变原始字符串,从而确保了程序的纯净性和可预测性。 - **实际示例**: - **字符串替换**:通过`str.replace(".", "|")`的例子可以看出,...
1. **基本语法与数据类型**:Scala的基础包括变量声明、常量、基本数据类型(如Int, Double, Boolean等)、字符串以及模式匹配。变量在Scala中是不可变的,通过`val`关键字定义,而可变变量使用`var`。 2. **对象和...