【问题标题】:I am trying to search array for Unicode value我正在尝试在数组中搜索 Unicode 值
【发布时间】:2017-01-18 16:22:45
【问题描述】:

我有一个大型 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];

现在我无法开始工作了。在不同的选项卡中,用户输入一个字符,我们检查数组以找到它,然后打印出第一项可能是“赢家”

在下面称为 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]);
            }
        }

【问题讨论】:

标签: c# arrays unicode


【解决方案1】:

问题是,您没有将“\u0041”存储在字符串数组MagicString 中。 您将“\u0041”放在那里,这是正确的 unicode 语法,因此 c# 在内部将其转换为“A”(或任何字符 41)。

您的错误在于MagicString 的声明。 你需要在那里输入@"\u0041"。 如果这不起作用,请通过输入 @"\" + "u0041" 让 C# 将其存储为字符串来欺骗它。

【讨论】:

    【解决方案2】:

    感谢您的帮助。 Grisgram 给了我我错过的线索。在数组中“\u0041”是一个字符而不是字符串。一旦我看到我想出了如何解决它。当我将它们绘制到 gridview 时,我必须将它们保留为 Unicode Char。

    所以经过一些更改后,我现在将 Unicode 字符转换为整数,然后使用它们

    int InPutChar = Convert.ToInt32(rchtxbx_input.Text[i]);
    
    char c = '\u3400';
    int LowestMagicChar = c;
    

    其余代码sn-p如下

    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;
    

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

    【讨论】:

    • 很高兴我能帮上忙。如果我的回答解决了你的问题,请采纳。
    猜你喜欢
    • 1970-01-01
    • 2013-08-20
    • 2017-03-13
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    • 2015-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多