String 使用PowerShell查找字符串中的差异

String 使用PowerShell查找字符串中的差异,string,powershell,compareto,difference,compareobject,String,Powershell,Compareto,Difference,Compareobject,所以我在玩Compare对象,它可以很好地比较文件。但是仅仅是字符串呢?有没有办法找出字符串之间的区别?CompareTo()可以很好地报告差异,但不能报告差异是什么。例如: PS:> $a = "PowerShell rocks" PS:> $b = "Powershell rocks" PS:> $a.CompareTo($b) 1 PS:> Compare-Object -ReferenceObject $a -DifferenceObject $b PS:>

所以我在玩Compare对象,它可以很好地比较文件。但是仅仅是字符串呢?有没有办法找出字符串之间的区别?CompareTo()可以很好地报告差异,但不能报告差异是什么。例如:

PS:> $a = "PowerShell rocks"
PS:> $b = "Powershell rocks"
PS:> $a.CompareTo($b)
1
PS:> Compare-Object -ReferenceObject $a -DifferenceObject $b
PS:>
一无所获


有没有办法让我知道字符串之间的实际差异,而不仅仅是差异?

可能是这样的:

function Compare-String {
  param(
    [String] $string1,
    [String] $string2
  )
  if ( $string1 -ceq $string2 ) {
    return -1
  }
  for ( $i = 0; $i -lt $string1.Length; $i++ ) {
    if ( $string1[$i] -cne $string2[$i] ) {
      return $i
    }
  }
  return $string1.Length
}

如果两个字符串相等或两个字符串之间第一个差值的位置相同,则函数返回-1。如果希望进行不区分大小写的比较,则需要使用
-eq
而不是
-ceq
-ne
而不是
-cne

可能类似于以下内容:

function Compare-String {
  param(
    [String] $string1,
    [String] $string2
  )
  if ( $string1 -ceq $string2 ) {
    return -1
  }
  for ( $i = 0; $i -lt $string1.Length; $i++ ) {
    if ( $string1[$i] -cne $string2[$i] ) {
      return $i
    }
  }
  return $string1.Length
}

如果两个字符串相等或两个字符串之间第一个差值的位置相同,则函数返回-1。如果需要不区分大小写的比较,则需要使用
-eq
而不是
-ceq
-ne
而不是
-cne

您必须定义“差异”的含义。你是说“告诉我第一个不同的角色的位置”吗?是的,比尔·斯图尔特,那会有用的。抱歉,我的问题不清楚。如果将
-caseSensitive
添加到
比较对象
,它将至少识别出这两个字符串是不同的。您必须定义“区别是什么”的含义。你是说“告诉我第一个不同的角色的位置”吗?是的,比尔·斯图尔特,那会有用的。抱歉,我的问题不清楚。如果将
-caseSensitive
添加到
比较对象
,它将至少识别出这两个字符串是不同的。