我有一个大的2D锯齿状边缘阵列
string[][] MagicString = new string[417][];
MagicString[0] = new string[] { "Winner", "\u0041", "\u0042", "\u0043"};
//and so on only show first item in 2D here.
字符串是\ u使它们成为Unicode值。我将它们作为Unicode,因为我们在数组中移动,我们可以从ASCII范围之外获取字符。我还使用这些值在不同的选项卡中显示Magic字符串。在上面的例子中,我们在单元格中看到A,然后在下一个单元格中看到B,然后是C等。所有这些Unicode字符串都能正常工作。
string[] InnerCharArray = MagicString[cmbobx_sounds.SelectedIndex];
..
..
dataGridView1[grid_y, grid_x].Value = InnerCharArray[char_num];
现在我无法开始工作了。在另一个选项卡中,用户输入一个字符,我们检查数组以找到它然后打印出第一个可能说“Winner”的项目
在下面的字符串中,为了输入A而调用Unicodevalue,我无法将其作为\ u0041。它总会返回双斜杠,但我只想要一个斜杠\ \ u0041。如何从RichTextBox中读取文本并将其转换为字符串\ u0041,与上面的数组相同?
for (int i = 0; i < rchtxbx_input.Text.Length; i++)
{
string UnicodeValue = @"\u" + String.Format("{0:x4}", Convert.ToInt32(rchtxbx_input.Text[i]));
//tried "\\u" @"\u" just u removed u altogether
for (int j = 0; j < MagicString.Length; j++)
{
string[] InnerCharArray = MagicString[j];
bool has = InnerCharArray.Contains(UnicodeValue);
/never goes true even when I type in A which is 0041 as in Array
if (has) rchtxbx_output.AppendText(InnerCharArray[0]);
}
}
答案 0 :(得分:1)
问题是,你没有存储&#34; \ u0041&#34;在您的字符串数组MagicString
中。
你把&#34; \ u0041&#34;在那里,这是一个正确的unicode语法,所以c#将其转换为&#34; A&#34; (或者41中的任何一个字符)。
你的错误在MagicString
的声明中。
在那里你需要放@"\u0041"
。
如果这不起作用,可以通过将@"\" + "u0041"
放在C#中将其存储为字符串来欺骗它。
答案 1 :(得分:0)
感谢您的帮助。格里斯格拉姆给了我错过的线索。在数组中,“\ u0041”是一个字符而不是字符串。一旦我看到我弄清楚如何解决它。当我将它们绘制到gridview时,我必须将它们保留为Unicode Char。
因此,经过一些更改后,我现在将Unicode字符转换为整数然后使用它们
int InPutChar = Convert.ToInt32(rchtxbx_input.Text[i]);
char c = '\u3400';
int LowestMagicChar = c;
代码段的其余部分位于
之下for (int i = 0; i < rchtxbx_input.Text.Length; i++)
{
string answers = "";
int InPutChar = Convert.ToInt32(rchtxbx_input.Text[i]);
char c = '\u3400';
// Implicit conversion: char is basically a 16-bit unsigned integer
int LowestMagicChar = c;
bool doCheck = true, multipleChar = false; //set true if statements will set false.
if (InPutChar < LowestMagicChar)
{
rchtxbx_output.AppendText(rchtxbx_input.Text[i].ToString());
doCheck = false;
}
if (doCheck == true) //Could be MagicChar so more checks inside
{
for (int j = 0; j < MagicString.Length; j++)
{
string[] InnerCharArray = MagicString[j];
for (int k = 1; k < InnerCharArray.Length; k++)
{
string unichar = InnerCharArray[k]; //Get next char to check
if (rchtxbx_input.Text[i].ToString() == unichar) //&& (doCheck))
//check with the char in textbox
{
if (doCheck == true)
{
answers = InnerCharArray[0]; //first time in we have one char
}
else
{
answers += ";" + InnerCharArray[0]; //comes in here if multiple chars for same sound
multipleChar = true;
}
// rchtxbx_output.AppendText(InnerCharArray[0] + " ");
//If the char then put down the sound and space.
doCheck = false;
现在我有了它的工作我只需要让它变得更好更快。感谢所有人的帮助,在指出之前我们常常看不到明显的东西。