Question:
So I’m playing around with Compare-Object, and it works fine for comparing files. But what about just strings? Is there a way to find the difference between strings? CompareTo() is good about reporting that there is a difference, but not what the difference is. For example:
1 2 3 4 5 6 7 |
PS:> $a = "PowerShell rocks" PS:> $b = "Powershell rocks" PS:> $a.CompareTo($b) 1 PS:> Compare-Object -ReferenceObject $a -DifferenceObject $b PS:> |
Nothing returned.
Any way to let me know about the actual difference between the strings, not just that there is a difference?
Answer:
Perhaps something like this:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
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 } |
The function returns -1 if the two strings are equal or the position of the first difference between the two strings. If you want case-insensitive comparisons, you would need to use -eq
instead of -ceq
and -ne
instead of -cne
.