PowerShell如何获取字符串指定字符位置并按规则插入斜杠
PowerShell字符串斜杠处理相关问题
初始需求描述
- 现有包含多个斜杠的测试字符串:
$message = ab/cde/f/ghijklm/no/p - 需要编写函数处理该字符串,返回存储所有斜杠位置的数组
$slash_array,要求位置从1开始计数,示例运行输出如下:
PS > Write-Output $slash_array 3,7,9,17,20
- 该数组的用途:后续做字符后插斜杠操作时,若当前字符处于上述斜杠位置则跳过插入,避免在已有斜杠后重复添加斜杠,出现连续多斜杠的问题。
补充说明与真实场景
本人是Stack Overflow新用户,此前有用户删除了我问题中所有引导性语句,想咨询这是否属于Stack Overflow的正常操作。
- 最初的问题描述做了简化,真实业务需求如下:
- 待处理原字符串:
$message = "my name is silloky" - 转换规则:每个字符之间插入单个斜杠
/,两个单词之间的间隔位置插入双斜杠//,最终效果为m/y//n/a/m/e//i/s//s/i/l/l/o/k/y,字符串末尾是否带斜杠不做要求。
- 待处理原字符串:
- 最初的实现思路:
- 第一步先将原字符串中的空格替换为1个斜杠
- 第二步在每个字符后插入斜杠,遇到已有斜杠的位置则跳过插入,避免出现3个连续斜杠
- 最开始误以为PowerShell无法直接判断当前字符是否为
/,所以计划先提取所有斜杠位置存入数组作为插入操作的忽略列表,因此发起本次提问。
参考实现方案
1. 斜杠位置数组获取(匹配初始需求的输出结果)
示例输出的位置是从1开始计数(0基索引下第一个斜杠在第2位,输出值为3),实现代码如下:
$message = "ab/cde/f/ghijklm/no/p" $slash_array = for ($i = 0; $i -lt $message.Length; $i++) { if ($message[$i] -eq '/') { $i + 1 } } # 验证输出 Write-Output $slash_array # 输出结果:3 7 9 17 20,和示例要求完全一致
2. 真实场景简便实现(无需提前提取斜杠位置)
不用走「替换空格-逐字符插斜杠-跳过斜杠位置」的绕路逻辑,直接按拆分拼接的思路实现更简洁:
$message = "my name is silloky" # 先按空格拆分为单词数组,每个单词拆为单字符用单斜杠连接,最后单词之间用双斜杠连接 $result = ( $message.Split(' ') | ForEach-Object { $_.ToCharArray() -join '/' } ) -join '//' # 验证输出 Write-Output $result # 输出结果:m/y//n/a/m/e//i/s//s/i/l/l/o/k/y,完全符合要求
平台规则咨询
目前参考提供的思路已经完成了功能实现,想确认Stack Overflow的作答规则:是否可以自行发布答案并采纳,还是需要发布最终方案后,采纳对自己帮助最大的答案?
内容的提问来源于stack exchange,提问作者Silloky
相关产品推荐
相关产品推荐

