我正在尝试将所有字符替换为他们的莫尔斯代码等价物。我使用了textBlock.Text.Replace()方法来实现这一点,它工作正常,直到我到达句点字符。当我尝试用“。-.- .-”替换它时,它工作正常但是现在所有其他角色都搞砸了。在人物角色之前,一切都很好。
这是代码
namespace PivotApp1
{
public partial class Textmorse : PhoneApplicationPage
{
public string[] aakkoset = { "A", "B", "C", "D", "E",
"F", "G", "H", "I", "J",
"K", "L", "M", "N", "O",
"P", "Q", "R", "S", "T",
"U", "V","W", "X", "Y",
"Z", "Ä", "Ö", "0", "1",
"2", "3", "4", "5", "6",
"7", "8", "9", "?", ":",
",", "@", "/", "=", " ",
"."};
public string[] morse = { ".- ", "-... ", "-.-. ", "-.. ", ". ",
"..-. ", "--. ", ".... ", ".. ", ".--- ",
"-.- ", ".-.. ", "-- ", "-. ", "--- ",
".--. ", "--.- ", ".-. ", "... ", "- ",
"..- ", "...- ", ".-- ", "-..- ", "-.-- ",
"--.. ", ".-.- ", "---. ", "----- ", ".---- ",
"..--- ", "...-- ", "....- ", "..... ", "-.... ",
"--... ", "---.. ","----. ", "..--.. ", "---... ",
"-....- ", ".--.-. ", "-..-. ", "-...- ", " ",
".-.-.-"};
public Textmorse()
{
InitializeComponent();
}
private void TBoxText1_TextChanged(object sender, TextChangedEventArgs e)
{
CreateMorseText();
}
public void CreateMorseText()
{
tBlockMorse1.Text = TBoxText1.Text.ToUpper()
.Replace(aakkoset[0], morse[0])
.Replace(aakkoset[1], morse[1])
.Replace(aakkoset[2], morse[2])
.Replace(aakkoset[3], morse[3])
.Replace(aakkoset[4], morse[4])
.Replace(aakkoset[5], morse[5])
.Replace(aakkoset[6], morse[6])
.Replace(aakkoset[7], morse[7])
.Replace(aakkoset[8], morse[8])
.Replace(aakkoset[9], morse[9])
.Replace(aakkoset[10], morse[10])
.Replace(aakkoset[11], morse[11])
.Replace(aakkoset[12], morse[12])
.Replace(aakkoset[13], morse[13])
.Replace(aakkoset[14], morse[14])
.Replace(aakkoset[15], morse[15])
.Replace(aakkoset[16], morse[16])
.Replace(aakkoset[17], morse[17])
.Replace(aakkoset[18], morse[18])
.Replace(aakkoset[19], morse[19])
.Replace(aakkoset[20], morse[20])
.Replace(aakkoset[21], morse[21])
.Replace(aakkoset[22], morse[22])
.Replace(aakkoset[23], morse[23])
.Replace(aakkoset[24], morse[24])
.Replace(aakkoset[25], morse[25])
.Replace(aakkoset[26], morse[26])
.Replace(aakkoset[27], morse[27])
.Replace(aakkoset[28], morse[28])
.Replace(aakkoset[29], morse[29])
.Replace(aakkoset[30], morse[30])
.Replace(aakkoset[31], morse[31])
.Replace(aakkoset[32], morse[32])
.Replace(aakkoset[33], morse[33])
.Replace(aakkoset[34], morse[34])
.Replace(aakkoset[35], morse[35])
.Replace(aakkoset[36], morse[36])
.Replace(aakkoset[37], morse[37])
.Replace(aakkoset[38], morse[38])
.Replace(aakkoset[39], morse[39])
.Replace(aakkoset[40], morse[40])
.Replace(aakkoset[41], morse[41])
.Replace(aakkoset[42], morse[42])
.Replace(aakkoset[43], morse[43])
.Replace(aakkoset[44], morse[44])
.Replace(aakkoset[45], morse[45]);
}
private void TBoxText1_Loaded(object sender, RoutedEventArgs e)
{
TBoxText1.Focus();
}
}
}
答案 0 :(得分:8)
你明白为什么会这样,不是吗?当你搜索句点时,没有办法区分哪些句号存在,因为它们在原始字符串中,哪些句子在那里,因为它们是某些其他字符的莫尔斯代码序列的一部分。
首先执行句点,或者更健壮地迭代字符串一次,然后替换每个字符。
答案 1 :(得分:4)
我会使用字典或某种KeyValue对集合
This page有一个很好的例子。
答案 2 :(得分:1)
我会将句点替换为.Replace(aakoset[45], morse[45])
到开头。
可能发生的事情是你用dits(句号)和破折号替换所有你的角色,当“句号”被替换时,它会将你所有的“dits”视为句号。
答案 3 :(得分:-1)
首先执行所有期间而不是最后期间? D'OH!太慢了。