小编pis*_*hen的帖子

单个中文字符在Java/Scala字符串中确定为长度2

我正试图从一个字符串中分割掉所有的汉字,但是我遇到了一个奇怪的角色

scala> ""
res1: String = 

scala> res1.length
res2: Int = 2

scala> res1.getBytes
res3: Array[Byte] = Array(-16, -91, -111, -82)

scala> res1(0)
res4: Char = ?

scala> res1(1)
res5: Char = ?
Run Code Online (Sandbox Code Playgroud)

它是单个字符,但Java/Scala将其确定为两个未知字符.通常我看到中文字符在UTF-8中占用三个字节,但这个字符需要四个字符.

因此,我无法拆分String并找到这个单个字符.更糟糕的是,当myString.replaceAll("[^\\p{script=Han}]", "")用于踢出所有非中文字符时,第二部分被替换,它变成无效的字符串.

这有什么解决方案吗?我在Ubuntu上使用openjdk-8-jdk.

java scala character-encoding

11
推荐指数
1
解决办法
3079
查看次数

sbt找不到Resolver.file()定义的本地存储库

我用

name := "sbt-publish-test"

version := "0.1-SNAPSHOT"

publishTo := Some(Resolver.file("sbt-repo",  file("/home/pishen/sbt-repo")))
Run Code Online (Sandbox Code Playgroud)

并将sbt publish我的项目发布到目录中.

现在在另一个项目中,我想解决刚刚发布的项目.我用

resolvers += "my-repo" at "file:///home/pishen/sbt-repo"

libraryDependencies += "default" %% "sbt-publish-test" % "0.1-SNAPSHOT"
Run Code Online (Sandbox Code Playgroud)

并且能够毫无错误地解决项目.结果show resolvers是:

> show resolvers 
[info] List(my-repo: file:///home/pishen/sbt-repo)
Run Code Online (Sandbox Code Playgroud)

但是,当我使用时

resolvers += Resolver.file("my-repo", file("/home/pishen/sbt-repo"))

libraryDependencies += "default" %% "sbt-publish-test" % "0.1-SNAPSHOT"
Run Code Online (Sandbox Code Playgroud)

结果show resolvers成为:

> show resolvers
[info] List(FileRepository(my-repo,FileConfiguration(true,None),Patterns(ivyPatterns=List(), artifactPatterns=List(/home/pishen/sbt-repo/[organisation]/[module](_[scalaVersion])(_[sbtVersion])/[revision]/[artifact]-[revision](-[classifier]).[ext]), isMavenCompatible=true, descriptorOptional=false, skipConsistencyCheck=false)))
Run Code Online (Sandbox Code Playgroud)

并且sbt说当我输入时它无法解决依赖sbt update:

[warn]  module not found: default#sbt-publish-test_2.10;0.1-SNAPSHOT
[warn] ==== local: tried
[warn]   /home/pishen/.ivy2/local/default/sbt-publish-test_2.10/0.1-SNAPSHOT/ivys/ivy.xml
[warn] ==== …
Run Code Online (Sandbox Code Playgroud)

scala sbt

6
推荐指数
1
解决办法
1080
查看次数

当Scala中的赋值语句后跟花括号时,分号推断不起作用?

http://www.artima.com/pins1ed/builtin-control-structures.html#7.7,我看到以下代码

val a = 1;
{
  val a = 2
  println(a)
}
println(a)
Run Code Online (Sandbox Code Playgroud)

它说这里需要分号,但为什么呢?

根据http://www.artima.com/pins1ed/classes-and-objects.html#4.2中的规则,我认为分号应该是自动添加的

  1. val a = 1 可以是一份法律声明.
  2. 下一行开头{,我认为可以开始一个法律声明.(因为如果我添加分号并将前两行分成两个语句,则没有编译错误.)
  3. val a = 1 不在括号或括号中.

scala

3
推荐指数
1
解决办法
135
查看次数

标签 统计

scala ×3

character-encoding ×1

java ×1

sbt ×1