【问题标题】:How to make 2 characters be seen as one letter?如何使2个字符被视为一个字母?
【发布时间】:2019-07-05 22:51:19
【问题描述】:

我正在创建一个使用威尔士语的游戏。游戏的目的是帮助孩子们学习拼写某些单词。所以基本上当一个词被说出时,他们必须通过点击屏幕上正确的字母来拼写这个词。

我面临的挑战是将单词的字符与他们选择的字母进行比较。他们显然必须以正确的顺序选择字母。由于威尔士字母表包含 8 个字母,每个字母有 2 个字符,即Ch, Dd, Ll etc,编译器会将它们读取为单独的字符,即'C',而不是'Ch'。一个例子是单词'Gwallt' (hair in English)。编译器会认为 L 是字母 L 的 2 次单独出现。实际上它是威尔士语中的一个字母....因此,当用户在屏幕上单击 'Ll' 进行拼写时,它会抛出一个错误....如何我可以避免这种情况吗?我可以设置一些规则吗?我将所有各种单词存储在一个数组中。希望以上内容有意义吗?

【问题讨论】:

  • 您是否可以访问整个字符串或每个字符的字符?
  • 我将整个字符串放在一个数组中。例如,数组中有 10 个单词,因此有 10 个字符串元素。抱歉,我不太清楚你所说的逐个字符是什么意思?

标签: c# arrays unity3d character alphabet


【解决方案1】:

使用正则表达式拆分可能会对您有所帮助。

//ch is the first element, ll an other char or any char from a to z
//Ignoring case and multi line
private Regex tokenizerRegex = new Regex(@"(ch|ll|[a-z])", RegexOptions.IgnoreCase | RegexOptions.Multiline);
//split your input string
//split returns an array of strings
var tokensText = tokenizerRegex.Split("channel");
//print results
tokensText.ToList().ForEach(i => Console.WriteLine(i.ToString()));

结果:

> empty string
> ch
> empty string
> a
> empty string
> n
> empty string
> n
> empty string
> e
> empty string
> l
> empty string

【讨论】:

  • 非常感谢您。我如何将单词的字符(例如 Ch)与单击的按钮字母(例如 Ch)进行比较?它会将“Ch”视为两个单独的字母而不是一个吗?
  • 哇!我想我开始看到了!所以如果你给它字符串'Chemistry',它也会意识到Ch是一个字母/字符?
  • 我可以将一个字符串数组(包含威尔士字母表)传递给 Regex 函数吗?
  • 是的,当然,只需使用for 循环迭代它们并返回一个字符矩阵
【解决方案2】:

我认为问题出在字符编码上。我建议对特定的有向图使用正确的 Unicode 代码点 .NET Character Encoding Latin Script in Unicode

【讨论】:

  • 谢谢你。我不知道正确的 Unicode 代码点是什么:/ 是否会有威尔士字母的 Unicode,例如“Ch”、“Dd”、“Ll”等?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多