在Scala中将"__L_"
和"_E__"
合并到"_EL_"
的最佳方法是什么?
我不想使用if
和for
命令。
答案 0 :(得分:3)
这个怎么样:
def combine(xs: String, ys: String): String =
(xs zip ys).map {
case ('_', y) => y
case (x, _) => x
}.mkString("")
唯一不太好的是如何从集合(IndexedSeq [Char])返回到字符串。另一种方法是使用带有Array [Char]的String构造函数。这可能会更有效率。
请注意,zip适用于不同长度的字符串,但结果将是较短字符串的大小。这可能是也可能不是你想要的。
答案 1 :(得分:2)
while (in.hasNext()) {
words = in.next();
if (words.matches(alphaRegex)) {
numberWords++;
message = "The name is "+words+"\n";
JOptionPane.showMessageDialog (null, message);
} else if (words.matches(numRegex)) {
countNumber++;
num = words; // instead of num = in.next()
message = "The number is "+num+"\n";
JOptionPane.showMessageDialog (null, message);
}
}
默认情况下优先考虑首次超过二分的字符
def zipStrings(first: String,
second: String,
comb: (Char, Char) => String = (f, _) => f.toString,
placeholder: Char = '_') =
first.zipAll(second, '_', '_').map {
case (c, `placeholder`) => c
case (`placeholder`, c) => c
case (f, s) => comb(f, s)
}.mkString
原创字符串:
zipStrings("__A", "X_CD") // yields "X_AD"
zipStrings("A__YY", "BXXXX", (f, s) => s"($f|$s)") // yields "(A|B)XX(Y|X)(Y|X)"