如何使用powershell从字符串中打印奇数字符

时间:2018-06-01 16:32:31

标签: powershell printing

我正在尝试使用powershell从字符串Consequences打印奇数字符。

下面的代码正在运行,但有没有其他简单的方法来执行此任务?比如使用-split函数?

$student_name = "Consequences"
$out = ""
for($i = 0; $i -lt $student_name.Length ;$i++ ){
    if ($i % 2 -eq 0 ){
        $out += $student_name[$i]
    }
}
$out

它应该打印输出如下

Cneune

5 个答案:

答案 0 :(得分:1)

您可以使用单个foreach循环和string方法完成您尝试执行的操作:

$word = 'Consequences'
@(foreach ($c in ($word -split '')) {
    if ($word.IndexOf($c) % 2 -eq 0) { $c }
}) -join ''

我使用数组运算符(@())强制foreach将项目作为单个集合返回,以便-join正常工作。

答案 1 :(得分:1)

好的,我会做一个正确的答案:

$out = (0..$student_name.length | ?{($_ % 2) -eq 0} | %{$student_name[$_]}) -join ''

这将获取从0到字(0..$student_name.length)中字符数的所有整数。然后它过滤只保留奇数整数(?{($_ % 2) -eq 0})。它使用这些整数从字符串中的该位置的字符串中获取每个字符(%{$student_name[$_]})。最后,它将角色和连接在一起成为一个字符串(-join '')。

答案 2 :(得分:1)

再展示两种可用的技术。第一个使用-join的一元形式,利用语句可以返回值和计数2而不是检查数字是否均匀的事实。

$student_name = "Consequences"
-join @(for ($i = 0; $i -lt $student_name.Length; $i += 2) {
        $student_name[$i]
})

第二个解决方案与第一个解决方案类似,但使用foreach循环和$foreach枚举器而不是for循环。

-join $(foreach ($c in [char[]] $student_name) {
        $c
        [void] $foreach.MoveNext()
})

答案 3 :(得分:0)

这是一个基于Powershell中的.NET Linq的解决方案,可能是最快的解决方案:检查索引器的第一位是否设置为确定奇数字符。从char-array中删除零字符并加入到字符串。

f

答案 4 :(得分:0)

我的一位朋友提出了这个答案,虽然它的概念相同。

$long_word = "Consequences"
-join ($long_word -split '(.{2})').ForEach({$_[0..0]})