我正在尝试创建一种方法,该方法将混洗后的字母中的字母替换为输入的字母,但是我一直在获取IndexOutOfRange,却不知道为什么。
在调试器中,它说letterIndex等于-1,但我不知道怎么做。
private string SubCypher(string input, string charsToSub)
{
char[] charsToSubArr = charsToSub.ToCharArray();
char[] alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray();
char[] inputChars = input.ToCharArray();
for(int index = 0; index < inputChars.Length; index++)
{
char toBeSubbed = inputChars[index];
int letterIndex = Array.IndexOf(alphabet, toBeSubbed);
inputChars[index] = charsToSubArr[letterIndex];
}
return new string(inputChars);
}
private void transformButton_Click(object sender, EventArgs e)
{
string input = inputTextBox.Text;
switchCaseTextBox.Text = SwitchCase(input);
reverseTextBox.Text = Reverse(input);
pigLatinTextBox.Text = PigLatin(input);
shiftTextBox.Text = ShiftCypher(input, 3);
subTextBox.Text = SubCypher(input, "NBAJYFOWLZMPXIKUVCDEGRQSTH");
}
答案 0 :(得分:1)
如果未找到字符,则在调用String.IndexOf(Char)时返回-1。 Array.IndexOf(Array,ArrayObject)也会发生同样的情况
发生的事情是您找不到指定的字母。还应该删除字母的char []并将其保留为String,然后调用String.IndexOf(Char),这将使代码运行更快。
这里是解决该问题的好方法:
n
答案 1 :(得分:0)
outputStream = new DataOutputStream(connection.getOutputStream());
// To send string data
outputStream.writeBytes(twoHyphens + boundary + lineEnd);
outputStream.writeBytes("Content-Disposition: form-data; name=\"" + stringName + "\""+lineEnd);
outputStream.writeBytes("Content-Type: text/plain; charset=UTF-8" + lineEnd);
outputStream.writeBytes(lineEnd);
outputStream.writeBytes(stringValue + lineEnd);
outputStream.flush();
// To send file data
outputStream.writeBytes(twoHyphens + boundary + lineEnd);
outputStream.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\";filename=\"" + pathToOurFile + "\"" + lineEnd);
outputStream.writeBytes(lineEnd);
表示letterIndex = -1
数组不包含字符alphabet
。因此,您的toBeSubbed
参数可能包含小写字母字符或数字/符号。
在将其传递给input
方法之前,尝试在输入字符串上调用ToUpper()
:
SubCypher