PowerShell Char数组遍历问题:无法过滤空值与空白字符
解决PowerShell字符数组空白过滤问题
核心问题分析
你写的判断逻辑if ($i -ne " " -or $i -ne $null -or $i -ne ' ')存在致命错误:
- 使用
-or时,只要任意一个条件为真,整个表达式就为真。比如当$i是空格时,$i -ne $null为真,条件成立不会过滤;当$i是$null时,$i -ne " "为真,同样不会过滤。 - 重复判断
" "和' '没有意义,两者完全等价。 - 没考虑非打印空白字符(比如换行符
\n、制表符\t),这些才是导致大量空白行的关键原因。
可行解决方法
方法1:修正循环判断逻辑
把-or替换为-and,同时用[char]::IsWhiteSpace()覆盖所有空白字符类型:
# 假设$chromeValue是从Chrome控件获取的字符串 $charArray = $chromeValue.ToCharArray() foreach ($char in $charArray) { if ($char -ne $null -and ![char]::IsWhiteSpace($char)) { Write-Output $char } }
方法2:用Where-Object直接过滤数组
更简洁的写法,一步完成数组过滤:
$chromeValue = "12345" $filteredChars = $chromeValue.ToCharArray() | Where-Object { $_ -ne $null -and ![char]::IsWhiteSpace($_) } $filteredChars
方法3:先清理字符串再转数组
如果不需要保留任何空白字符,直接先移除字符串中的所有空白内容,再转换为字符数组:
$chromeValue = "12345" # 用正则移除所有空白字符(包括空格、换行、制表符等) $cleanedStr = $chromeValue -replace '\s', '' $charArray = $cleanedStr.ToCharArray() $charArray
内容的提问来源于stack exchange,提问作者SA.
相关产品推荐
相关产品推荐

