用希伯来语连接数量的问题

orentu

新成员
加入
2019年11月4日
消息
2
编程经验
5-10
你好
当我试图将一些str连接到一个时
订单是改变的
例如
str1 =数字
str2 =希伯来语
str3 = number.
str3连接到str1而不是str2我猜(如果我连接","应该没问题,但我
想要固定长度
一些解释:
i循环通过列表字典来获得长度和标记<> (from xml)
通过XML循环后(将XML视为TXT)
并获得标签比较列表之间的值存在,如果匹配i,则存在TXT / XML
获取标签之间的值并连接到列表字典结尾
问题:::::
不按订单连接,因为希伯来语是RTL我猜
有什么建议么?
谢谢
C#:
for (int index = 0; index < dict.Count; index++)
{
    var item = dict.ElementAt(index);
    var itemKey = item.Key;
    var itemValue = item.Value;
    // int x = Int32.Parse(itemKey);
    StringBuilder builder = new StringBuilder(itemValue);
    builder.Replace("<", "</");
    int lengthh = builder.Length;
    StringBuilder builderWO = new StringBuilder(itemValue);
    builderWO.Replace(">", "/>");
    foreach (string line in lines)
    {
        int theFirstLen = line.Trim().IndexOf(itemValue);
        int theLastLen = line.Trim().IndexOf(builder.ToString());
        int theLastLenWO_OPEN = line.Trim().IndexOf(builderWO.ToString());
        if (theFirstLen >= 0 && theLastLen > 0 || theLastLenWO_OPEN >= 0)
        {
            if (theLastLenWO_OPEN >= 0) //mean that we need to put spaces only
            {
                SR_LEFT = SR_LEFT + "{" + i + ",-" + itemKey.Substring(0, itemKey.IndexOf(".")) + "}";
                Console.WriteLine(itemKey.Length - itemKey.IndexOf("."));
                SR_RIGHT = SR_RIGHT + new string(' ', Int32.Parse(itemKey.Substring(0, itemKey.IndexOf("."))));
                i += 1;
                break;
            }
            else
            {
                // Console.WriteLine(line.Trim().Substring(theFirstLen + lengthh, theLastLen - theFirstLen - lengthh));
                SR_LEFT = SR_LEFT + "{" + i + ",-" + itemKey.Substring(0, itemKey.IndexOf(".")) + "}";
                SR_RIGHT = SR_RIGHT + line.Trim().Substring(theFirstLen + lengthh, theLastLen - theFirstLen - lengthh);
                i += 1;
                break;
            }
        }
    }
}
using (StreamWriter sw = new StreamWriter("C:\\TST.TEXT", false))
{
    sw.WriteLine(SR_LEFT, SR_RIGHT);
}
 
最后编辑了主持人:

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,870
地点
切萨皮克,va.
编程经验
10+
Can you give us some sample values in your dictionary dict and lines list lines?
 

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,870
地点
切萨皮克,va.
编程经验
10+
无论如何,字符串是正确的。我认为您只是通过RTL感知文本编辑器和渲染器执行的RTL渲染欺骗。

这是我的测试程序:
Program.cs:
using System;
using System.Linq;
using System.Windows.Forms;

namespace SimpleCS
{
    class Program
    {
        static void DumpString(string s)
        {
            foreach (char ch in s)
                Console.Write("{0:x4} ", (int)ch);
            Console.WriteLine();
        }

        static void Main(string[] args)
        {
            var str1 = "123";
            var str2 = "שלום";
            var str3 = "456";

            DumpString(str1);
            DumpString(str2);
            DumpString(str3);

            var concat = str1 + str2 + str3;
            DumpString(concat);

            MessageBox.Show(concat);
        }
    }
}

以下是控制台的输出:
Output:
0031 0032 0033
05e9 05dc 05d5 05dd
0034 0035 0036
0031 0032 0033 05e9 05dc 05d5 05dd 0034 0035 0036

见证每个角色的字节是正确的顺序。

它只是切换到RTL的渲染:
capture.png.
 

sh

众所周知的成员
加入
2018年9月5日
消息
1,982
编程经验
10+
我相信这可能是op试图做的事情。重要的部分: "\u200E"

C#:
            var str1 = "123";
            var str2 = "כַּף סוֹפִית";
            var str3 = "456";
            var c = string.Concat(str1, "\u200E" + str2 + "\u200E" , str3);
            Console.WriteLine(c);
            MessageBox.Show(c);

请参阅解决问题或部分解决您的问题。这实际上是Windows中的渲染问题,从未解决过。

screenshot_.jpg.
 

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,870
地点
切萨皮克,va.
编程经验
10+
看起来不仅是Windows有渲染问题。 Chrome的渲染引擎有一个不同的问题:
HTML:
<html>
<body>
    <div>123</div>
    <div>שלום</div>
    <div>456</div>
    <div>123שלום456</div>
</body>
</html>

上面注意到最后一个div显示为123456,然后是希伯来文本,但如果您看到附件,则数据存储为:123希伯来文本456.(重命名.txt到.html,因为此论坛不会允许附加。 HTML文件。)
 

附件

  • test.txt.
    128 bytes · Views: 23

sh

众所周知的成员
加入
2018年9月5日
消息
1,982
编程经验
10+
渲染问题是因为两侧都没有格式化。
运行这个:
C#:
            var str1 = "123";
            var str2 = "כַּף סוֹפִית";
            var str3 = "456";
            var c = string.Concat(str1, "\u200E" + str2 , str3);
            Console.WriteLine(c);
            MessageBox.Show(c);
 

sh

众所周知的成员
加入
2018年9月5日
消息
1,982
编程经验
10+
让我详细说明。

If you remove the code point from the right side of the Hebrew word, it will align all the numbers to the left leaving all the Hebrew on the right side of the string. If you switch the code point to be on the right side, it will apply the Hebrew wording to be on the left. Only when there is a code mark "\u200E" on both sides will the Hebrew be centered.

screenshot_33.jpg.




screenshot_34.jpg.


据信这些代码点是为了处理这个确切的问题。
 

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,870
地点
切萨皮克,va.
编程经验
10+
排序。我觉得这标志被滥用,但我仍然试图嘲笑 Unicode Bidi算法.

\ U200E是LRM(左右标记)代码点。为什么要包装已经RTL的希伯来文本,具有LRM代码点?在希伯来文本之前使用RLM(右到左标记:\ U200F),不会更有意义,然后将LRM标记放在此之前"456"? eg.: 123 \u200F hebrew text \u200E 456. Doing it this way doesn't work for Windows, though.

更有趣的是为什么下面的工作而不需要LRM?
C#:
            var str1 = "ABC";
            var str2 = "כַּף סוֹפִית";
            var str3 = "DEF";
            var c = string.Concat(str1, str2 , str3);
            Console.WriteLine(c);
            MessageBox.Show(c);
 

sh

众所周知的成员
加入
2018年9月5日
消息
1,982
编程经验
10+
我觉得标记被滥用
我可以向您保证,LTR代码标记不是使用的错过,特别是因为我在过去的两天内研究了这个时,因为我只知道它和文本定位的问题,特别是与它一样以上。自从此以来,我已经更加感兴趣,并在这个主题上读了一点。我并不声称是一个专家。哈哈!但我也意识到希伯来语被反向阅读。

并且由于希伯来文本的排序,我相信,任何呈现任何希伯来语或阿拉伯文本字符的渲染算法以某种方式绑定或硬编码RTL代码标记,强制文本的排序就像它一样,所以我相信有一个可能的错误和那个错误 - 可能 - 当您尝试沿着侧面希伯来语或阿拉伯语写作时分配普通文本时,排序单词排序的唯一方法是将希伯来文本包装在LTR代码标记中,以充当希伯来文本的分隔符 - 编码到RTL代码标记,而且因为完成了渲染(通过它) - 可能 - 被硬编码为RTL),希伯来文本不会被任何LTR码标记分阶段逐步相位,似乎根据我的观察结果给予我的理论。也许我错了?

我对吗?我真的不知道。但从我能看到的那样,它看起来就像我所描述的那样。我正在尽力解释我认为这是根据观察我试过的几件事的工作。由于希伯来语/阿拉伯文似乎似乎不受欢迎的是由LTR码标记围绕它。那有意义吗?哈哈
为什么要包装已经RTL的希伯来文本,具有LRM代码点
我在最后一段中部分地回答了这一点,但它似乎很明显,这是将非希伯来语或非阿拉伯语文本与中心的非阿拉伯语文本定位。无论如何,我所知道的就是它的工作,这是主要的。
 

sh

众所周知的成员
加入
2018年9月5日
消息
1,982
编程经验
10+
如果您在视觉上想象我如何看到它的工作。我认为这是一个很好的例子。如果检测到RTL字符,则调用外部函数,该函数将其包围在某些单独的代码标记中,该代码标记在其两侧没有逐步相位。 (这就像使用 !重要的CSS标签)。因此,即使您在返回RTL-Text = HebRew Word之前和之后添加了LTR Code标签。它不会改变,因为它已经硬编码,无法编辑。从我在Opera,Chrome,Mozilla和C#上完成的测试,它们似乎都有不同的清除问题。所以它必须与之有关
BIDI算法。
concat.png.
 
Last edited:

sh

众所周知的成员
加入
2018年9月5日
消息
1,982
编程经验
10+
我只是想知道是否有人愿意对这一主题进行一些测试和研究,这有助于我的好奇一面来试图了解BIDI算法。最初,当我在Chars的对齐中探讨了这个问题时,我认为.NET可能会对一些值​​显示的责任。

但是,当您开始测试上面的相同代码时这是否会与每个浏览器中使用的渲染引擎有任何关系?

每个浏览器都包括使用相同引擎的浏览器(参见屏幕截图),但在不同的版本上也显示出不同的结果彼此,并且如果有人有一个理论,我很好奇?

为了学习新的东西,对自己不知道,我在试图了解算法的工作原理时,我会对这个问题进行了光泽。虽然对这个话题的回复仅仅是我自己和SkyDiver,但我假设你们在黑暗中就像各种网络浏览器引擎如何管理到每个人一样呈现不同的结果;因此,你们没有回复?

我想想每次浏览器都会以相同的方式运行它使用相同的功能,它将输出相同的结果,但它没有。

screenshot_39.jpg.screenshot_40.jpg.screenshot_41.jpg.screenshot_42.jpg.

要测试此功能,请将文本文件复制到HTML文档中并保存。 参考HTML - 希伯来语的Char系列 - 参考LTR. 或者 refrtl..
 

附件

  • test.txt.
    1.2 KB · Views: 18

约翰

C#论坛主持人
工作人员
加入
2011年4月23日
消息
1,154
地点
挪威
编程经验
10+

sh

众所周知的成员
加入
2018年9月5日
消息
1,982
编程经验
10+
方便的文章,我知道HTML的不同标记,到V5等,但它没有解释C#中的源代码使用。它也没有表明希伯来语是如何自动的 对齐 自动,它也没有解释为什么在C#中,希伯来语不受影响(对于正确或不对),当用LTR标签括起来时。我不知道HTML中有一个Bidi覆盖,但我确实从您的文章中了解到。有助于将来使用我猜。我所学到的就是 WPF. 与WF相比,如何操纵和控制,是如何更顺畅的地狱。我还了解到每个CAL都没有单独检查,但是在单词块中检查。当我通过Chararray跑出某些单词并检查希伯来语的时候,这最终对我来说是有意义的:
C#:
        /// <summary>
        /// This function checks a string array for a range of chars as well as vowels which belong to the Hebrew or Arabic language.
        /// </summary>
        /// <param name="eChar">This property checks each char from the executing method iterating a chararray.</param>
        /// <param name="hasHebrewChar">This bool is set to true if a Hebrew or Arabic char is detected within the charRange.</param>
        /// <param name="hasOtherHebrewChar">This bool is set to true if a Hebrew or Arabic char is detected within the charRange using a different range limit.</param>
        /// <param name="charRange">This string array contains the different Hebrew/Arabic chrRanges in order to evaluate against for Hebrew/Arabic chars.</param>
        /// <returns></returns>
        private static bool HasHebrew(char eChar, bool hasHebrewChar, bool hasOtherHebrewChar, char[] charRange)
        {
            hasHebrewChar = eChar >= charRange[0] && eChar <= charRange[1];
            hasOtherHebrewChar = eChar >= charRange[2] && eChar <= charRange[3];
            if (hasHebrewChar) { return true; }
            else if (hasOtherHebrewChar) { return true; }
            else { return false; }
        }
I noticed that some chars slip through the net and pass for non-Hebrew/Arabic, but I am unsure why that happens. For example, taking str2 in the following snipped contains the word כַּף סוֹפִית, but the letter וֹ which is waw in Arabic, and vav in Hebrew seems to slip through the filter. Maybe I am missing additional char ranges for Hebrew Vowels ? :
C#:
        /// <summary>
        /// This Button1_Click method is designed to create one tuple of three strings at a time.
        /// </summary>
        /// <param name="sender">Base object</param>
        /// <param name="e">Event args for the button</param>
        private void Button1_Click(object sender, EventArgs e)
        {
            var str1 = "123";
            var str2 = "כַּף סוֹפִית";
            var str3 = "456";


            Tuple<string, string, string> strTuple = Tuple.Create(str1, str2, str3);
            string result = BidiHelper.GetHebrewConcat(BidiHelper.CharRange, BidiHelper.CodeMark, strTuple, string.Empty);
            if (!string.IsNullOrEmpty(result))
                MessageBox.Show(result);
        }
我用来通过CHAR数组执行迭代的方法如下。注意我在代码中inline inline inline,以保存另一种恼怒的冗长帖子,因为我有时可以做到 😜 并将课程包含在片段下方的整体:
C#:
        public static string GetHebrewConcat(char[] charRange, string codeToPoint, Tuple<string, string, string> tupleOfStrings, string separator)
        {
            var charArr = tupleOfStrings.Item2.ToCharArray();
            int spins = 0;
            foreach (char eChar in charArr)
            {
                switch (HasHebrew(eChar, false, false, charRange))
                {
                    case true:
                        spins++;
                        if (tupleOfStrings.Item2.Length.Equals(spins))
                        { return string.Join(separator, tupleOfStrings.Item1, string.Concat(codeToPoint, tupleOfStrings.Item2, codeToPoint), tupleOfStrings.Item3); }
                        break;
                    case false:
                        spins++;
                        if (tupleOfStrings.Item2.Length.Equals(spins))
                        { return string.Join(separator, tupleOfStrings.Item1, tupleOfStrings.Item2, tupleOfStrings.Item3); }
                        break;
                }
            }
            return string.Empty;
        }
C#:
    /// <summary>
    /// The BidiHelper class is designed to parse strings and detect Hebrew and Arabic
    /// languages and concatenate strings with Hebrew or Arabic characters but keeping
    /// the second item of the tuple positioned between item1 and item3
    /// </summary>
    public static class BidiHelper
    {
        /// <summary>
        /// The character range for (CharRange) consists of the Hebrew Block ranges for Hebrew and Arabic letters. See for more info : //en.m.wikipedia.org/wiki/Hebrew_(Unicode_block)
        /// </summary>
        public static readonly char[] CharRange = { (char)0x0580, (char)0x05ff, (char)0xfb1d, (char)0xfb4f };
        public static readonly string CodeMark = "\u200E";
        /// <summary>
        /// The code mark (CodeMark) is set to use LTR directional order. See for more info : http://unicode.org/reports/tr9/#Directional_Formatting_Codes
        /// </summary>
        /// <param name="charRange">This parameter takes the string values from the CharRange string array.</param>
        /// <param name="codeToPoint">This parameter is responsible for the directional order of the text and takes its value from the CodeMark string
        /// See summery for CodeMark for additional info.</param>
        /// <param name="tupleOfStrings">The tuple takes three parameters and holds the three values we want to concatenate together. These are the
        /// three parameters we used to create the Tuple with above.</param>
        /// <param name="separator">The separator is used to add an optional symbol for separation. To use none, use string.Empty</param>
        /// <returns>The returned value returns a concatenated string of the three values.</returns>
        public static string GetHebrewConcat(char[] charRange, string codeToPoint, Tuple<string, string, string> tupleOfStrings, string separator)
        {
            var charArr = tupleOfStrings.Item2.ToCharArray();
            int spins = 0;
            foreach (char eChar in charArr)
            {
                switch (HasHebrew(eChar, false, false, charRange))
                {
                    case true:
                        spins++;
                        if (tupleOfStrings.Item2.Length.Equals(spins))
                        { return string.Join(separator, tupleOfStrings.Item1, string.Concat(codeToPoint, tupleOfStrings.Item2, codeToPoint), tupleOfStrings.Item3); }
                        break;
                    case false:
                        spins++;
                        if (tupleOfStrings.Item2.Length.Equals(spins))
                        { return string.Join(separator, tupleOfStrings.Item1, tupleOfStrings.Item2, tupleOfStrings.Item3); }
                        break;
                }
            }
            return string.Empty;
        }
        /// <summary>
        /// This function checks a string array for a range of chars as well as vowels which belong to the Hebrew or Arabic language.
        /// </summary>
        /// <param name="eChar">This property checks each char from the executing method iterating a chararray.</param>
        /// <param name="hasHebrewChar">This bool is set to true if a Hebrew or Arabic char is detected within the charRange.</param>
        /// <param name="hasOtherHebrewChar">This bool is set to true if a Hebrew or Arabic char is detected within the charRange using a different range limit.</param>
        /// <param name="charRange">This string array contains the different Hebrew/Arabic chrRanges in order to evaluate against for Hebrew/Arabic chars.</param>
        /// <returns></returns>
        private static bool HasHebrew(char eChar, bool hasHebrewChar, bool hasOtherHebrewChar, char[] charRange)
        {
            hasHebrewChar = eChar >= charRange[0] && eChar <= charRange[1];
            hasOtherHebrewChar = eChar >= charRange[2] && eChar <= charRange[3];
            if (hasHebrewChar) { return true; }
            else if (hasOtherHebrewChar) { return true; }
            else { return false; }
        }
    }
在过去的几天里,我花了很多时间,大多研究C ++ Repos并彻底擦拭其他 Git存储库 例如,在通过算法订购之前了解每个单词如何分组每个单词的功能。这是一个非常深入但有趣的算法,主要是在主要问题上进行学习,这是C#上的C#上没有足够的记录源代码,我也没有进一步了解希伯来语和阿拉伯语如何自动分组或者如何将如何分组若要覆盖默认模式以使希伯来语/阿拉伯语只有单词的对齐方式,就像您可以在HTML中。我最近的发现是 参考来源 而且我目前只是在读取它。 :)

无论如何,也许这段代码将帮助寻求与C#带有数字的字符串的人

编辑,修复内联评论
 
Last edited:

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,870
地点
切萨皮克,va.
编程经验
10+
I noticed that some chars slip through the net and pass for non-Hebrew/Arabic, but I am unsure why that happens. For example, taking str2 in the following snipped contains the word כַּף סוֹפִית, but the letter וֹ which is waw in Arabic, and vav in Hebrew seems to slip through the filter. Maybe I am missing additional char ranges for Hebrew Vowels ? :
Are you sure it is being missed? Your HasHebrew() is returning true for it:
capture.png.


这是我用来测试方法的代码:
C#:
        static void Main(string[] args)
        {
            var sb = new StringBuilder();
            var str2 = "כַּף סוֹפִית";
            foreach (var ch in str2)
                sb.AppendLine($"{ch}: {BidiHelper.HasHebrew(ch, false, false, CharRange)}");
            MessageBox.Show(sb.ToString(), str2);
        }

以下完整代码:
C#:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace TestBidi
{
    /// <summary>
    /// The BidiHelper class is designed to parse strings and detect Hebrew and Arabic
    /// languages and concatenate strings with Hebrew or Arabic characters but keeping
    /// the second item of the tuple
    /// </summary>
    public static class BidiHelper
    {
        /// <summary>
        /// The character range for (CharRange) consists of the Hebrew Block ranges for Hebrew and Arabic letters. See for more info : //en.m.wikipedia.org/wiki/Hebrew_(Unicode_block)
        /// </summary>
        public static readonly char[] CharRange = { (char)0x0580, (char)0x05ff, (char)0xfb1d, (char)0xfb4f };
        public static readonly string CodeMark = "\u200E";
        /// <summary>
        /// The code mark (CodeMark) is set to use LTR directional order. See for more info : http://unicode.org/reports/tr9/#Directional_Formatting_Codes
        /// </summary>
        /// <param name="charRange">This parameter takes the string values from the CharRange string array.</param>
        /// <param name="codeToPoint">This parameter is responsible for the directional order of the text and takes its value from the CodeMark string
        /// See summery for CodeMark for additional info.</param>
        /// <param name="tupleOfStrings">The tuple takes three parameters and holds the three values we want to concatenate together. These are the
        /// three parameters we used to create the Tuple with above.</param>
        /// <param name="separator">The separator is used to add an optional symbol for separation. To use none, use string.Empty</param>
        /// <returns>The returned value returns a concatenated string of the three values.</returns>
        public static string GetHebrewConcat(char[] charRange, string codeToPoint, Tuple<string, string, string> tupleOfStrings, string separator)
        {
            string[] col_OfConcatValues = { };
            var charArr = tupleOfStrings.Item2.ToCharArray();
            int spins = 0;
            foreach (char eChar in charArr)
            {
                switch (HasHebrew(eChar, false, false, charRange))
                {
                    case true:
                        spins++;
                        if (tupleOfStrings.Item2.Length.Equals(spins))
                        { return string.Join(separator, tupleOfStrings.Item1, string.Concat(codeToPoint, tupleOfStrings.Item2, codeToPoint), tupleOfStrings.Item3); }
                        break;
                    case false:
                        spins++;
                        if (tupleOfStrings.Item2.Length.Equals(spins))
                        { return string.Join(separator, tupleOfStrings.Item1, tupleOfStrings.Item2, tupleOfStrings.Item3); }
                        break;
                }
            }
            return string.Empty;
        }
        /// <summary>
        /// This function checks a string array for a range of chars as well as vowels which belong to the Hebrew or Arabic language.
        /// </summary>
        /// <param name="eChar">This property checks each char from the executing method iterating a chararray.</param>
        /// <param name="hasHebrewChar">This bool is set to true if a Hebrew or Arabic char is detected within the charRange.</param>
        /// <param name="hasOtherHebrewChar">This bool is set to true if a Hebrew or Arabic char is detected within the charRange using a different range limit.</param>
        /// <param name="charRange">This string array contains the different Hebrew/Arabic chrRanges in order to evaluate against for Hebrew/Arabic chars.</param>
        /// <returns></returns>
        private static bool HasHebrew(char eChar, bool hasHebrewChar, bool hasOtherHebrewChar, char[] charRange)
        {
            hasHebrewChar = eChar >= charRange[0] && eChar <= charRange[1];
            hasOtherHebrewChar = eChar >= charRange[2] && eChar <= charRange[3];
            if (hasHebrewChar) { return true; }
            else if (hasOtherHebrewChar) { return true; }
            else { return false; }
        }

        static void Main(string[] args)
        {
            var sb = new StringBuilder();
            var str2 = "כַּף סוֹפִית";
            foreach (var ch in str2)
                sb.AppendLine($"{ch}: {BidiHelper.HasHebrew(ch, false, false, CharRange)}");
            MessageBox.Show(sb.ToString(), str2);
        }
    }
}
 

sh

众所周知的成员
加入
2018年9月5日
消息
1,982
编程经验
10+
不,我不确定。因为我最初昨天写得完全不同地写道,我不记得我最初写过它,所以也许这是一个短路问题,谁知道。虽然好奇,那个假的象征是空间或什么?本周我有足够的Bidi去了我几个月。哈哈

但我很高兴为你工作。 (y)
 

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,870
地点
切萨皮克,va.
编程经验
10+
是的,它是错误的空间。
 

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,870
地点
切萨皮克,va.
编程经验
10+
我知道上面的所有代码都是在您在代码编译调试伪造的时编写的,但以下是:
C#:
private static bool HasHebrew(char eChar, bool hasHebrewChar, bool hasOtherHebrewChar, char[] charRange)
{
    hasHebrewChar = eChar >= charRange[0] && eChar <= charRange[1];
    hasOtherHebrewChar = eChar >= charRange[2] && eChar <= charRange[3];
    if (hasHebrewChar) { return true; }
    else if (hasOtherHebrewChar) { return true; }
    else { return false; }
}
应该写作:
C#:
private static bool HasHebrew(char eChar, char[] charRange)
{
    return (charRange[0] <= eChar && eChar <= charRange[1]) || (charRange[2] <= eChar && eChar <= charRange[3]);
}

或者更好:
C#:
static (char Min, char Max)[] HebrewCharRanges = new[] { ('\u0590', '\u05ff'), ('\ufb1d', '\ufb4f') };

static bool IsHebrew(char ch)
    => HebrewCharRanges.Any(r => r.Min <= ch && ch <= r.Max);
 

sh

众所周知的成员
加入
2018年9月5日
消息
1,982
编程经验
10+
我知道上面的所有代码都是在你的代码编译 - 调试写作fugue时编写的
不,这与我写的方式无关。当我知道它在论坛上时,我刚刚把它写在那样。当然,我也可以用来写下这篇文章,也可以使用linq还有更多的inline变量声明,而且我总是选择以最简单的方式写入新用户来阅读和遵循的方式写入。但一如既往,总是欢迎对更高级用户的贡献。每个人的东西 ;)
 
最佳 底部