You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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的正常操作。

  • 最初的问题描述做了简化,真实业务需求如下:
    1. 待处理原字符串:$message = "my name is silloky"
    2. 转换规则:每个字符之间插入单个斜杠/,两个单词之间的间隔位置插入双斜杠//,最终效果为m/y//n/a/m/e//i/s//s/i/l/l/o/k/y,字符串末尾是否带斜杠不做要求。
  • 最初的实现思路:
    1. 第一步先将原字符串中的空格替换为1个斜杠
    2. 第二步在每个字符后插入斜杠,遇到已有斜杠的位置则跳过插入,避免出现3个连续斜杠
    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 03:57:23