在Scala中组合/组合两个字符串

时间:2015-11-21 08:23:14

标签: scala

在Scala中将"__L_""_E__"合并到"_EL_"的最佳方法是什么?

我不想使用iffor命令。

2 个答案:

答案 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)"