2014-03-06 134 views
1

我有一个字符串变量。我想交换字符串中的两个字符。 我想随机交换彼此接近的两个字符。如何交换字符串变量中的两个字符?

这就是我所做的: 我已经这样做了,但在某些文字中我得到错误。

string word = txtWord.Text; 
Random rand = new Random(); 
int randomNumber= rand.Next(0, word.Length); 
string swappedWord = SwapCharacters(lastWord, randomNumber, randomNumber + 1); 

private string SwapCharacters(string value, int position1, int position2) 
{ 
    char[] array = value.ToCharArray(); // Convert a string to a char array 
    char temp = array[position1]; // Get temporary copy of character 
    array[position1] = array[position2]; // Assign element 
    array[position2] = temp; // Assign element 
    return new string(array); // Return string 
} 
+4

尝试'rand.Next(0,word.Length - 1);' –

+0

你正在得到什么错误? – AbhinavRanjan

+1

您应该在您的问题中包含异常,例如您正在获取的'IndexOutOfRangeException'。 –

回答

1

只需更改线路如下:

int randomNumber= rand.Next(0, word.Length -1); 

让我们看看它是否正常工作。

+0

当我这样做。我知道它的正确性,但如果单词只有1个字符,当我更改swapCharaters()方法中单词的位置时,将会出错。 – EM10

+0

@ EM10为什么交换1个字符?只需将它放在方法的顶部:if(value.Length <= 1)返回值;' –

+0

这是因为字符串中只有一个字符,并且在您的方法中,您传递'randomNumber + 1'为好。如果(randomNumber pareto

0

试试这个。还要检查单词是否为空。

int randomNumber= rand.Next(0, word.Length - 1); 
3

使用StringBuilder:

//如果你想更换

StringBuilder sb = new StringBuilder(theString); 
    sb[index] = newChar; 
    theString = sb.ToString(); 

//交换

string input = "AXBYCZ"; //Sample String 
    StringBuilder output = new StringBuilder(); 

    char[] characters = input.ToCharArray(); 

    for (int i = 0; i < characters.Length; i++) 
    { 
     if (i % 2 == 0) 
     { 
     if((i+1) < characters.Length) 
     { 
      output.Append(characters[i + 1]); 
     } 
        output.Append(characters[i]); 
     } 
    } 
0

试试这个代码。这是最容易改变你的代码

int randomNumber= rand.Next(0, word.Length-2);