以下代码在Java 8和9中编译,但行为不同.
class Simple {
static String sample = "\nEn un lugar\r\nde la Mancha\nde cuyo nombre\r\nno quiero acordarme";
public static void main(String args[]){
String[] chunks = sample.split("\\R\\R");
for (String chunk: chunks) {
System.out.println("Chunk : "+chunk);
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我用Java 8运行它时,它返回:
Chunk :
En un lugar
de la Mancha
de cuyo nombre
no quiero acordarme
Run Code Online (Sandbox Code Playgroud)
但是当我使用Java 9运行它时,输出是不同的:
Chunk :
En un lugar
Chunk : de la Mancha
de cuyo nombre
Chunk : no quiero acordarme
Run Code Online (Sandbox Code Playgroud)
为什么?
给定一个String我需要获得一个Optional,如果String为null或为空,则结果为Optional.empty.我可以这样做:
String ppo = "";
Optional<String> ostr = Optional.ofNullable(ppo);
if (ostr.isPresent() && ostr.get().isEmpty()) {
ostr = Optional.empty();
}
Run Code Online (Sandbox Code Playgroud)
但肯定必须有一种更优雅的方式.
经过很多问题的隔离,我得到了这个片段:
object Snippet {
def main(args: Array[String]): Unit = {
println("Snip demo:: "+ util.Properties.versionString)
println(" jvm "+System.getProperty("java.version"))
import javax.sound.sampled._
val mixers : Array[Mixer.Info] = javax.sound.sampled.AudioSystem.getMixerInfo()
println(" Numer of mixers: "+ mixers.size)
for (mi : Mixer.Info <- mixers ) {
println("mixer info "+mi.getName)
}
}
}
Run Code Online (Sandbox Code Playgroud)
令人惊讶的是,运行后的输出与运行时的输出sbt run
不同scala
:
$ sbt run
Loading /cygdrive/c/Program Files (x86)/sbt/bin/sbt-launch-lib.bash
[warn] The global sbt directory is now versioned and is located at ....
[warn] You are seeing this warning because there is …
Run Code Online (Sandbox Code Playgroud)