我想有选择地合并两个字符串的内容以产生输出,如下所示:
$string1 = "a c"
$string2 = " bd"
$mergedString = "abd"
以下是我提出的实现此目的的代码段:
# First convert strings to arrays
$array1 = $string1.ToCharArray()
$array2 = $string2.ToCharArray()
$array3 = @("", "", "") # array of matching length that will contain result
# Use foreach loop to iterate through each array index
0..2 | foreach {
if (($array1[$_] -eq " ") -and ($array2[$_] -eq " ")) {
# rule 1: empty space if both arrays have an empty space at this index
$array3[$_] = " "
} elseif (($array1[$_] -eq " ") -and ($array2[$_] -ne " ")) {
# rule 2: non-space character if only one array has a non-space character
# at this index
$array3[$_] = $array2[$_]
} elseif (($array1[$_] -ne " ") -and ($array2[$_] -eq " ")) {
$array3[$_] = $array1[$_]
} elseif (($array1[$_] -ne " ") -and ($array2[$_] -ne " ")) {
# rule 3: array2 character if both arrays have non-space character at
# this index
$array3[$_] = $array2[$_]
}
}
完成循环后,$array3
可以转换为我想要的$mergedString
。我的代码产生了所需的输出。但是,我想在几对字符串上执行此操作,所以我担心这段代码(即使是一个函数)可能不是实现我的目标的最有效方法。
我觉得正则表达式可能是一个更好的选择,但我仍然试图围绕正则表达式。
答案 0 :(得分:3)
由于默认为第二个数组(如果两个都是非空格),您可以将规则集简化为"从第二个数组中取出字符,除非空格":
$array1 = $string1.ToCharArray()
$array2 = $string2.ToCharArray()
$mergedCharArray = 0..($array1.Count - 1) |ForEach-Object {
if($array2[$_] -eq ' '){
$array1[$_]
}
else {
$array2[$_]
}
}
$mergedString = $mergedCharArray -join ''
答案 1 :(得分:1)
我会提供object
个答案。
Object
因此,如果string2的当前字母不是空格,请将其添加到$ mergedCharArray,然后移动到下一个字母的循环。否则,如果string1的当前字母不是空格,则添加该字母并继续循环播放下一个字母,如果这两个字母都失败则添加空格。
将它们转换为字符数组并不是真的有意义。无论如何,引用字符串中的索引都可以获得该字符,因此我跳过了该步骤。