TextField.text назначается многострочной строкой, но они не равны сразу после назначения

У меня есть массив строк:

private var phrase:Array = ["You will be given a series of questions like this:\n2 + 2 =\n(click or press ENTER to continue)","You can use the Keyboard or Mouse\nto deliver the answer\n\"ENTER\" locks it in.\n(click or press ENTER to continue)","\nClick Here\n to start."];  

Позже в сценарии у меня есть условие, чтобы увидеть, равно ли phrase[0] instructText.text, поэтому я поставил «тест» сразу после присваивания, как показано ниже:

instructText.text = phrase[0];
if (instructText.text == phrase[0]) {
    trace("phrase zero");
}
else {
    trace("nottttttttt");
}  

//OUTPUT: nottttttttt

Я пробовал различные комбинации phrase[0] as String и String(phrase[0]), но безуспешно.

Что мне не хватает?


person Chowzen    schedule 18.09.2016    source источник
comment
Перед утверждениями if/else почему бы вам просто не написать trace("phrase 0 is : " + String(instructText.text) ); и как это выглядит? Не равно/точно?   -  person VC.One    schedule 18.09.2016


Ответы (1)


Оказывается, свойство text класса TextField преобразует символы "перевода строки" (код "\n", ASCII из 10< sub>10=A16) на символ "Возврат каретки" (код ASCII 1310=D16 ).

Итак, вам нужно преобразование LF в CR (или наоборот), чтобы сделать однородное сравнение того, что хранится в свойстве, с тем, что у вас есть в элементе массива:

function replaceLFwithCR(s:String):String {
    return s.replace(/\n/g, String.fromCharCode(13));
}
if (instructText.text == replaceCRwithLF(phrase[0])) {
    trace("They are equal :)");
}
else {
    trace("They are NOT equal :(");
}
// Output: They are equal :)


P.S. Чтобы получить код символа, вы можете использовать метод charCodeAt() класса String:

trace("\n".charCodeAt(0)); // 10
person someOne    schedule 18.09.2016