重载方法调用有替代方案:String.format

2024-01-04

我在下面编写了以下 Scala 代码来处理传入的字符串、格式化字符串、将其附加到StringBuilder并返回格式化的String将转义的 unicode 返回给我的调用者进行其他处理。

Scala 编译器在有以下内容的行中抱怨:String.format调用时出现以下错误:

具有替代方案的重载方法值格式:(x$1; java.util.Locale; x$2: String, X$3: Object*) (x$1:String,x$2: Object*)字符串不能应用于(*String, Int)

class TestClass {    
    private def escapeUnicodeStuff(input: String): String = {
            //type StringBuilder = scala.collection.mutable.StringBuilder
            val sb = new StringBuilder()
            val cPtArray = toCodePointArray(input) //this method call returns an Array[Int]
            val len = cPtArray.length
            for (i <- 0 until len) {
              if (cPtArray(i) > 65535) {
                val hi = (cPtArray(i) - 0x10000) / 0x400 + 0xD800
                val lo = (cPtArray(i) - 0x10000) % 0x400 + 0xDC00
                sb.append(String.format("\\u%04x\\u%04x", hi, lo)) //**complains here**
              } else if (codePointArray(i) > 127) {
                sb.append(String.format("\\u%04x", codePointArray(i))) //**complains here**
              } else {
                sb.append(String.format("%c", codePointArray(i))) //**complains here**
              }
            }
            sb.toString
          }

    }

我该如何解决这个问题?如何清理代码以实现格式化字符串的目的?在此先感谢 Scala 专家


The String.format http://docs.oracle.com/javase/7/docs/api/java/util/Formatter.htmlJava 中的方法期望Objects作为其论点。这ObjectJava 中的类型相当于AnyRef在 Scala 中输入。 Scala 中的基本类型扩展AnyVal – not AnyRef。详细了解两者之间的差异AnyVal, AnyRef, and Any 在文档中 http://www.scala-lang.org/old/node/128 or in 这个答案 https://stackoverflow.com/questions/2335319/what-are-the-relationships-between-any-anyval-anyref-object-and-how-do-they-m。最明显的修复方法是使用Integer来自 Java 的包装类以获得Object代表你的Ints:

String.format("\\u%04x\\u%04x", new Integer(hi), new Integer(lo))

使用这些包装类几乎是不惯用的 Scala 代码的象征,并且仅在没有更好的选择时才应用于与 Java 的互操作性。在 Scala 中执行此操作更自然的方法是使用StringOps http://www.scala-lang.org/api/2.11.5/index.html#scala.collection.immutable.StringOps等效方法format:

"\\u%04x\\u%04x".format(hi, lo)

您还可以使用f插值器 http://docs.scala-lang.org/overviews/core/string-interpolation.html#the-f-interpolator更简洁的语法:

f"\\u$hi%04x\\u$lo%04x"

另外,使用for像这里这样的循环在 Scala 中是不惯用的。您最好使用功能列表方法之一,例如map, foldLeft, 甚至foreach与使用的部分函数一起match句法。例如,您可以尝试以下操作:

toCodePointArray(input).foreach {
    case x if x > 65535 => 
        val hi = (x - 0x10000) / 0x400 + 0xD800
        val lo = (x - 0x10000) % 0x400 + 0xDC00
        sb.append(f"\\u$hi%04x\\u$lo%04x") 
    case x if > 127 => sb.append(f"\\u$x%04x") 
    case x => sb.append(f"$x%c")    
}

或者,如果您不必使用StringBuilder,实际上只需要在附加许多字符串的情况下使用,您可以将整个方法体替换为foldLeft:

def escapeUnicodeStuff(input: String) = toCodePointArray(input).foldLeft("") {
    case (acc, x) if x > 65535 => 
        val hi = (x - 0x10000) / 0x400 + 0xD800
        val lo = (x - 0x10000) % 0x400 + 0xDC00
        acc + f"\\u$hi%04x\\u$lo%04x"
    case (acc, x) if x > 127 => acc + f"\\u$x%04x"
    case (acc, x) => acc + f"$x%c"
}

或者甚至map随后是一个mkString:

def escapeUnicodeStuff(input: String) = toCodePointArray(input).map {
    case x if x > 65535 => 
        val hi = (x - 0x10000) / 0x400 + 0xD800
        val lo = (x - 0x10000) % 0x400 + 0xDC00
        f"\\u$hi%04x\\u$lo%04x"
    case x if x > 127 => f"\\u$x%04x"
    case x => f"$x%c"
}.mkString
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

重载方法调用有替代方案:String.format 的相关文章

  • 如何用R删除字符串中的重复字符?

    我想实现一个功能R删除字符串中的重复字符 例如 假设我的函数名为removeRS 所以它应该这样工作 removeRS Buenaaaaaaaaa Suerrrrte Buena Suerte removeRS Hoy estoy tris
  • 如何将枚举绑定到 playframework 表单?

    我有一个以下形式的枚举 object MatchFilterType extends Enumeration type MatchFilterType Value val gt Value gt val lt Value lt val eq
  • Python 中聚类相似字符串的算法?

    我正在编写一个脚本 该脚本当前包含多个 DNA 序列列表 每个列表都有不同数量的 DNA 序列 并且我需要根据汉明距离相似性对每个列表中的序列进行聚类 我当前的实现 目前非常粗糙 提取列表中的第一个序列并计算每个后续序列的汉明距离 如果它在
  • Perl 标识符中允许使用哪些字符?

    我正在做正则表达式作业 其中一个问题是 使用在线语言参考手册确定 Java Python Perl 和 C 的整数常量和标识符的正则表达式 我不需要关于正则表达式的帮助 我只是不知道 Perl 中的标识符是什么样的 我找到了描述有效标识符的
  • 如何将双精度数转换为保留 2 位小数的字符串?

    我正在将这个双精度数转换为字符串 以便可以将其显示在 TextView 上 我希望使用 String format 使字符串具有 2 个小数位 但我不知道将其放在这行文本中的何处 Example setText Double toStrin
  • Objective-C 右填充

    大家好 希望有人可以提供帮助 我正在浏览网络 但似乎没有什么真正有意义的 S 所以我有一个字符串可以说 123 我想使用如下函数 padr 123 5 x 结果应该是 123xx 抱歉 Objective C 在处理字符串时是一场噩梦 S
  • 如何获取可在 \N{} 中使用的所有值来生成特定的代码点?

    在执行调试时这个问题 https stackoverflow com questions 41738241 perl unknown charname nalpha 我问自己 如何找到我可以使用的所有值 N 对于给定的 Unicode 代码
  • 我可以使用从 Java 实现 java 接口的 scala 类吗?

    我正在学习 Scala 很好奇是否可以 创建一个在 Scala 中实现 Java 接口的对象 将对象编译成类文件并将其打包 使用 Java 中的对象 我想在 scala 中实现一个自定义的 lucene 查询解析器 并能够让其他人从 jav
  • 方法返回类型的类型推断

    当存在显式方法时 为什么 Scala 无法推断方法的返回类型return方法中使用的语句 例如 为什么下面的代码可以编译 object Main def who 5 def main args Array String println wh
  • 通过Listener获取Spark thrift服务器查询中读取的行数

    我正在尝试为我们的 ST 服务器构建一个监控系统 到目前为止 诸如记录查询 检索的行 红色和花费的时间之类的事情都很好 我已经实现了一个自定义侦听器 我能够毫无问题地检索查询和时间 侦听SparkListenerSQLExecutionSt
  • Python fuzzywuzzy 错误字符串或缓冲区期望

    我正在使用 fuzzywuzzy 在公司名称 csv 中查找近似匹配项 我正在将手动匹配的字符串与不匹配的字符串进行比较 希望找到一些有用的邻近匹配 但是 我在 fuzzywuzzy 中遇到了字符串或缓冲区错误 我的代码是 from fuz
  • 简单 C 字符串函数上的 Valgrind 错误

    让我们考虑这个简单的测试程序 include
  • 在 Scala REPL 中访问包私有方法

    假设我有一个private stuff method Stuff something in org my stuff 我可以在 Scala REPL 中做些什么 以便我可以调用Stuff something没有得到错误error value
  • 语言之间的 Unicode 范围映射

    此链接列出了 7707 种语言http www sil org iso639 3 download asp http www sil org iso639 3 download asp and http en wikipedia org w
  • 在 C 中初始化字符串的正确方法

    我见过人们的代码为 char str NULL 我也看到过这个 char str 我想知道初始化字符串的正确方法是什么 你什么时候应该初始化一个带有 NULL 的字符串 你应该在使用它之前设置它 这是你唯一的规则have遵循以避免未定义的行
  • 在 Python 中将 int 转换为字符串

    我希望能够生成多个名为 fileX txt 的文本文件 其中 X 是某个整数 for i in range key filename ME i txt Error here Can t concat a string and int fil
  • 这个错误是什么意思(SimpleHttpConnectionManager 被错误使用)?

    我正在尝试从 ElasticSearch 中读取数据到 Spark conf es resource sflow sflow es nodes ES01 es query some query rdd sc newAPIHadoopRDD
  • 如何在不进行硬编码的情况下使用 Cake 模式进行依赖注入?

    我刚刚阅读并享受蛋糕图案文章 http jonasboner com real world scala dependency injection di 然而 在我看来 使用依赖项注入的关键原因之一是您可以改变 XML 文件或命令行参数所使用
  • Python 字符串格式 - 类型错误 - 格式字符串参数不足

    那么这个字符串有什么问题呢 我无法弄清楚为什么它说格式字符串没有足够的参数 我是 Python 新手 只是想弄清楚 编辑 这与建议的其他问题不同 另一个正在尝试做一些我什至没有涉及的疯狂数组事情 我只需要了解元组的基本概念以及字符串格式化的
  • 如何在二维数组中找到字符串?

    我有一个看起来像这样的数组 var array a b c d e f 我希望能够在数组中搜索字符串 d 并返回对应的值 c try function find str array for var i in array if array i

随机推荐

  • 如何获取hive UDF中的taskID或mapperID(类似于Spark中的partitionID)?

    作为问题 如何在 hive UDF 中获取任务 ID 或映射器 ID 类似于 Spark 中的分区 ID 您可以使用 TaskContext 访问任务信息 import org apache spark TaskContext sc par
  • Facebook oauth 授权 URL 和参数选项

    Facebook 提供了一些关于参数的文档oauth login 登录对话框 OAuth 2 https developers facebook com docs reference dialogs oauth 参数为 client id
  • Java 6 中 IdentityHashMap 的实际使用[重复]

    这个问题在这里已经有答案了 可能的重复 IdentityHashMap 的用例 https stackoverflow com questions 838528 use cases for identityhashmap Java 5 中引
  • Android ActionBarSherlock 顶部图标返回

    我正在尝试制作顶部操作栏图标以允许用户返回到上一个屏幕 我试图实现这些代码 但没有一个起作用 任何人都可以指导我吗 我知道这看起来很简单 我是 android 新手 下面是我的代码 问题 当我点击图标按钮时 它只是清除了我的屏幕 而没有转到
  • com.android.build.gradle.api.BaseVariant.getOutputs()Ljava/util/List;'

    错误 无法找到方法 com android build gradle api BaseVariant getOutputs Ljava util List 导致此意外错误的可能原因包括 Gradle 的依赖项缓存可能已损坏 这有时会在网络连
  • 如何确定 ColdFusion 应用程序使用哪些文件?

    我正在开始对现有的 ColdFusion 应用程序进行一些工作 该应用程序没有版本控制 并且看起来像是未使用的 cfm 文件 test cfm test2 cfm 等 我想了解哪些文件实际上是应用程序的一部分 这样我就可以将其以可管理的状态
  • VBScript 环境变量

    我有一个关于应该如何修复运行脚本时看到的错误的问题 我很确定这与我使用 COMPUTERNAME 环境变量的方式有关 我的脚本的作用是在本地压缩一些文件 然后使用 robocopy 将它们复制到已安装或共享的驱动器 然后检查文件大小是否相同
  • 将新记录添加到 GridView 但不应更新数据库

    我有一个绑定到数据视图的网格视图 OnPageLoad 我正在填充网格视图记录 我有一个文本框和一个按钮 所以现在我想向 GridView 添加更多记录 但这些记录不应添加到数据库中 它们只是添加到页面中 当然来自数据库的默认记录也会保留
  • Python 中的就地函数

    Python中有一个就地函数的概念 例如shuffle就位 因为它返回None 如何确定函数是否就位 from random import shuffle print type shuffle
  • Javascript 中的函数是对象还是类型?

    In his 雄辩的 JavaScript Haverbeke 声称 第 16 页 在 JavaScript 系统中 大部分数据被整齐地分成称为值的东西 每个值都有一个类型 它决定了它可以扮演的角色 值有六种基本类型 数字 字符串 布尔值
  • Herkou Redis - 证书验证失败(证书链中的自签名证书)

    我在我的一个业余项目中使用 heroku redis 一段时间了 我目前用它来做三件事 它是我存储 firebase 证书的地方 它用于缓存站点上的数据 它用于 Rails sidekiq 作业 最近 我的 heroku 使用量增加了 我不
  • 自动释放池中的快速闭包访问没有 self 的方法

    这是示例代码 func anyMethod Nothing here var myVariable autoreleasepool anyMethod This should show error print myVariable This
  • 异步网络接口状态检查

    在 Mac OS X 上 有没有办法在网络接口 en0 en1 状态发生变化 例如网络接口处于活动状态 非活动状态等 时获取异步通知 我想知道是否有一种方法可以获取异步通知 而不是轮询状态 以便每当有更改时 都会触发通知并且应用程序可以处理
  • scikit SGDClassifierpartial_fit 不会增量学习。返回“类应包含所有有效标签”

    我将两个数据流传递给 sgd clf 分类器 如下面的代码所示 第一个partial fit 正在获取第一个数据流x1 y1 第二个partial fit 正在获取第二个数据流x2 y2 下面的代码在第二个partial fit步骤中给了我
  • ggplot2 中的注释不支持换行符是粘贴和解析的命令

    Question 如何得到paste and parse in annotate of ggplot2尊重换行符 n 问题和MWE 我正在尝试重现ggplot2使用 NMDS 分析的应力图metaMDS包装内vegan 这是我的 MWE 后
  • 使用动态表名称查询 Oracle 数据库

    我陷入了一些糟糕的数据库设计中 我必须查询按日期命名的表 当表名称与相关日期进行硬编码时 以下查询有效 SELECT ajob ORDER ID ajob JOB NAME abim SERVICE ID shist SERVICE NAM
  • 基本 Qt 应用程序 (QMainWindow) 中不显示小部件

    我是 Qt 新手 正在用简单的例子进行一些练习 我只是想通过编码来测试我的知识 通过一个简单的应用程序 用户在 QLineEdit 小部件中键入文本 该文本将显示在 QLabel 中 没有必要让它有用 我只是想尝试一下 编译应用程序时 我没
  • 如何通过winForms控制iTunes

    我可以看到这里已经回答了类似的问题 我如何通过java在iTunes中播放特定歌曲 https stackoverflow com questions 15872600 how would i play a specific song in
  • 文件上传导致文件大小为 0,错误代码为 0

    我正在尝试将图像上传到 php 脚本 我有一个非持久性错误 导致某些上传的图像的文件大小为 0 我尝试将 FILES 数组打印到我的日志文件中 它显示错误代码为 0 这应该没问题 这些行 foreach FILES image file a
  • 重载方法调用有替代方案:String.format

    我在下面编写了以下 Scala 代码来处理传入的字符串 格式化字符串 将其附加到StringBuilder并返回格式化的String将转义的 unicode 返回给我的调用者进行其他处理 Scala 编译器在有以下内容的行中抱怨 Strin