我试图搜索数组的Unicode值

时间:2017-01-18 16:22:46

标签: c# arrays unicode

我有一个大的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]);
            }
        }

2 个答案:

答案 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;

现在我有了它的工作我只需要让它变得更好更快。感谢所有人的帮助,在指出之前我们常常看不到明显的东西。