gpt4 book ai didi

c# - 替换特定字符后的字符数

转载 作者:太空狗 更新时间:2023-10-29 19:47:16 27 4
gpt4 key购买 nike

我正在创建一个将文本转换为盲文的应用程序。转换为盲文不是问题,但我不知道如何将其转换回来。

示例 1:将数字转换为盲文

1     = #a
123 = #abc
12 45 = #ab #de

示例 2:将大写字母转换为盲文

Jonas = ,jonas
JONAS = ,,jonas

我在将盲文恢复正常时遇到问题。我不能只将每个 a 转换为 1 等等。数字可以通过#检查,然后将它后面的字符更改为下一个空格,但我不知道如何。字母前的逗号很难与文本中的其他逗号分开。

这是我转换为盲文的类(class):

using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;

namespace BrailleConverter
{
class convertingBraille
{
public Font getIndexBrailleFont()
{
return new Font("Index Braille Font", (float)28.5, FontStyle.Regular);
}

public Font getPrintableFontToEmbosser()
{
return new Font("Lucida Console", (float)28.5, FontStyle.Regular);
//return new Font("Index Black Text Font", (float)28.5, FontStyle.Regular);
}

public string convertCapitalsToUnderscore(string text)
{
if (string.IsNullOrEmpty(text))
{
return "";
}

text = " " + text;

text = text.Replace('.', '\'');
text = text.Replace(',', '1');
text = text.Replace('?', '5');
text = text.Replace('!', '6');
text = text.Replace(':', '3');
text = text.Replace('=', '7');
text = text.Replace('+', '4');
text = text.Replace('*', '9');
text = text.Replace('é', '=');

StringBuilder newText = new StringBuilder(text.Length * 2);
newText.Append(text[0]);

bool firstCapLetterInWord = true;

for (int i = 1; i < text.Length; i++)
{
char letter = text[i]; // Aktuell bokstav
char nextLetter = ' '; // Nästa bokstav

try
{
nextLetter = text[i + 1];
}
catch
{

}

// Är det stor bokstav?
if (char.IsUpper(letter))
{
// Är nästa bokstav stor?
if (char.IsUpper(nextLetter))
{
// Är det början av ett helt ord med caps?
if (firstCapLetterInWord)
{
newText.Append(",,"); // 2 st understräck framför ordet

firstCapLetterInWord = false; // Ändra så att inte nästa bokstav får 2 st understräck
}
}
else // Annars bara ett understräck
{
if (firstCapLetterInWord)
{
newText.Append(","); // Sätt understräck framför bokstav
}

firstCapLetterInWord = true; // Förbereda för nästa capsord
}
}

newText.Append(text[i]);
}

string finishedText = newText.ToString().TrimStart(); // Ta bort mellanslaget i början

finishedText = finishedText.ToLower();

finishedText = finishedText.Replace('å', '*');
finishedText = finishedText.Replace('ä', '>');
finishedText = finishedText.Replace('ö', '[');

return finishedText;
}

public string convertNumbersToBrailleNumbers(string text)
{
if (string.IsNullOrEmpty(text))
{
return "";
}

text = " " + text;

StringBuilder newText = new StringBuilder(text.Length * 2);
newText.Append(text[0]);

bool firstNumberInNumber = true;

for (int i = 1; i < text.Length; i++)
{
char letter = text[i]; // Aktuell tecken
char nextLetter = ' '; // Nästa tecken

try
{
nextLetter = text[i + 1];
}
catch
{

}

char convertedChar = text[i];

// Är tecknet en siffra?
if (char.IsNumber(letter))
{
// Är nästa tecken en siffra?
if (char.IsNumber(nextLetter))
{
// Är det början av ett flertaligt nummer?
if (firstNumberInNumber)
{
newText.Append('#'); // Brädkors framför nummret

firstNumberInNumber = false; // Ändra så att inte nästa siffra får brädkors
}
}
else // Annars bara ett understräck
{
if (firstNumberInNumber)
{
newText.Append('#'); // Sätt brädkors framför siffran

}

firstNumberInNumber = true; // Förbereda för nästa flertaliga nummer
}
}

newText.Append(convertedChar);
}

string finishedText = newText.ToString().TrimStart();

finishedText = finishedText.Replace('1', 'a');
finishedText = finishedText.Replace('2', 'b');
finishedText = finishedText.Replace('3', 'c');
finishedText = finishedText.Replace('4', 'd');
finishedText = finishedText.Replace('5', 'e');
finishedText = finishedText.Replace('6', 'f');
finishedText = finishedText.Replace('7', 'g');
finishedText = finishedText.Replace('8', 'h');
finishedText = finishedText.Replace('9', 'i');
finishedText = finishedText.Replace('0', 'j');

return finishedText;
}

public string convertBackToPrint(string oldText)
{
string newText = oldText.Replace(",", "");
newText = newText.Replace("#", "");
newText = newText.Replace("*", "å");
newText = newText.Replace(">", "ä");
newText = newText.Replace("[", "ö");
newText = newText.Replace('\'', '.');
newText = newText.Replace('1', ',');
newText = newText.Replace('5', '?');
newText = newText.Replace('6', '!');
newText = newText.Replace('3', ':');
newText = newText.Replace('7', '=');
newText = newText.Replace('4', '+');
newText = newText.Replace('9', '*');
newText = newText.Replace('=', 'é');

return newText;
}
}
}

最佳答案

考虑到这一点,也许您真正想要做的是实现自己的编码,称为 PrintableSwedishBrailleAsciiEncoding 继承自 Encoding 之类的东西基类。

using System.Text;

public sealed PrintableSwedishBrailleAsciiEncoding : Encoding
{
...
}

这将最大限度地提高代码的可重用性,并使您能够简单地使用框架的其余部分来完成您的工作。


为了回应您对我现已删除的答案的评论,我想您是在问,

How can I replace a certain character, followed by any number of non whitespace chars, up until the first whitespace char. Or, more generally, whole words beginning with a certain character?

所以你可以使用 Regex像这样,我认为这会匹配 # 后跟一些非空白字符。

var numberMatcher = new Regex(@"#\w+")
var firstMatch = numberMatcher.Match(yourText)

var alteredMatch = SomeTextAlteringFunction(firstMatch);

var yourNewText = numberMatcher.Replace(yourText, alteredMatch);

关于c# - 替换特定字符后的字符数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12364852/

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