gpt4 book ai didi

c# - 在 C# 中检查一个字符串是半角还是全角

转载 作者:行者123 更新时间:2023-11-30 18:47:17 28 4
gpt4 key购买 nike

C# application on Japanese Windows OS - Present Latin as Full-Width characters

我在上面的链接中引用了接受的答案,并使用下面的代码将日语字符串从全角转换为半角,但它返回相同的全角字符串而不进行转换。

string userInput = "チヨチヨチチヨチヨチ";
string result = userInput.Normalize(NormalizationForm.FormKC);

预期半宽输出:チヨチヨチチヨチヨチ实际输出:チヨチヨチヨチヨチ(全角)

但是,即使上面的代码应该将全角字符串转换为半角,当我将半角字符串 (チヨチヨチチヨチヨチ) 传递给上面的代码时,它会将其转换为全角形式 (チヨチヨチチヨチヨチ).

我在这里做错了什么?

无论如何,如果我的字符串已经是半角,我不希望执行上面的代码。

如何检查一个字符串是半角还是全角?

最佳答案

根据 this 文档,normalize 方法按预期工作。它必须将字符转换为标准字符,以便正确应用二进制比较。

但是如果你想要一个始终将全角转换为半角的自定义转换,你可以创建一个 Dictionary 来将全角字符映射到半角字符。 This link 可能有助于创建此 map 。

如果你想确定字符串是半角的,那么如果它包含任何全角字符,它就会被拒绝。创建一个全角字符(拉丁文和日文)的字符串,然后在全角字符串中找到要测试的字符串的所有字符。

我为此编写了 isHalfWidthString 方法,还添加了全角到半角转换器方法。我认为这可能有帮助:

    public class FullWidthCharactersHandler
{
static Dictionary<char, char> fullWidth2halfWidthDic;
static FullWidthCharactersHandler()
{
fullWidth2halfWidthDic = new Dictionary<char, char>();
string fullWidthChars = "アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンッァィゥェォャュョ゙゚ー0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
string halfWidthChars = "アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンッァィゥェォャュョ゙゚ー0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
for (int i = 0; i < fullWidthChars.Length; i++)
{
fullWidth2halfWidthDic.Add(fullWidthChars[i], halfWidthChars[i]);
}
}

public static bool isHalfWidthString(string toTestString)
{
bool isHalfWidth = true;
foreach (char ch in toTestString)
{
if (fullWidth2halfWidthDic.ContainsKey(ch))
{
isHalfWidth = false;
break;
}
}
return isHalfWidth;
}

public static string convertFullWidthToHalfWidth(string theString)
{
StringBuilder sbResult = new StringBuilder(theString);
for (int i = 0; i < theString.Length; i++)
{
if (fullWidth2halfWidthDic.ContainsKey(theString[i]))
{
sbResult[i] = fullWidth2halfWidthDic[theString[i]];
}
}
return sbResult.ToString();
}
}

测试使用 this link

我更新了代码以使用 Dictionary 以获得更好的性能。

关于c# - 在 C# 中检查一个字符串是半角还是全角,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57142760/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com