在Javascript中加载文本文件会添加意外的额外隐藏字符

时间:2014-09-17 01:58:08

标签: javascript string

也许这只是极度缺乏睡眠,但我无法弄清楚为什么会这样。我有一个4个字母的文本文件,每行一个如下:

text
lolz
test
word

当我尝试逐行将此文件加载到数组中时,我得到 5 个字符的字符串!

var request = new XMLHttpRequest();
request.open("GET", "test.txt");
request.onloadend = function()
{
    var wordList = request.response;
    wordList = wordList.split('\n');

    console.log(wordList[2].length);
}
request.send();

我正在使用Notepad ++进行编辑,我发现每行末尾没有空格。 sting.split()函数应该删除字符串被拆分的字符,因此额外的字符不应该是'\ n'。使用Chrome中的console.log,我无法确定实际上是多余的角色。似乎没有!

2 个答案:

答案 0 :(得分:3)

如果你以前从未遇到过这个问题,这可能是一个奇怪的问题。有时不仅仅是' \ n'字符包含在一个新行(您似乎已经熟悉)中,但是' \ r' "回车的字符"同样。这意味着除了跳过一个空格,开始一个新行之外,打字机还需要一直向左移动。我不确定你能预测什么时候你会得到回车......它可能是特定于平台的吗?或者也许文本编辑器具体?也许有真正知识的人可以扩展这个答案。

无论如何,现在,尝试为每个条目添加一个trim(),这样就可以摆脱隐藏的' \ r'您无法看到,如下所示:

var request = new XMLHttpRequest();
request.open("GET", "test.txt");
request.onloadend = function()
{
    var wordList = request.response;
    wordList = wordList.split('\n');

    for(var i = 0; i < wordList.length; i++)
        wordList[i] = wordList[i].trim();

    console.log(wordList[4].length);
}
request.send();

答案 1 :(得分:1)

拆分日期字符串时,我遇到了同样的问题;在每个数组项的开头和结尾处添加了一个额外的“不可见”字符; string.trim()无效。

花了我2天的时间进行以下工作:

从以下位置创建日期时间数组:

        var datetime = new Date();
        var dt = datetime.toLocaleString();
        var datetimearray=dt.split(" ");

通过datetime数组创建日期和时间字符串:

        var date=datetimearray[0];
        var time=datetimearray[1];

拆分日期和时间字符串:

        var datearray=datetimearray[0].split("/");
        var timearray=datetimearray[1].split(":");

然后将每个日期和时间元素转换为数字:

        var day =  getNumberFromString(datearray[0]);
        var month= getNumberFromString(datearray[1]);
        var year = getNumberFromString(datearray[2]);
        var hour =  getNumberFromString(timearray[0]);
        var minute= getNumberFromString(timearray[1]);
        var second = getNumberFromString(timearray[2]);

getNumberFromString函数:

    function getNumberFromString(string)
    {
        var stringsplit=string.split("");
        var stringlen=string.length;  // If it is the year part of the date, the length is 6
        switch(stringlen)
        {
             case 3:  // The last part of the time element (seconds) is only 3 for some reason
             case 4:  // The two character elements (day, month, hour, minute) are length 4 after the split
               var string1=stringsplit[1];  // create the first needed character from second array element; index 1
               var string2=stringsplit[2];  // create the second needed character from third array element; index 2

               string=string1+string2;  //add the 2 new elements together
               return parseInt(string); //convert the number as a string to a number

            case 6:  // For the date string; similar to the above 
              string1=stringsplit[1];
              string2=stringsplit[2];
              string3=stringsplit[3];
              string4=stringsplit[4];
              year1=string1+string2;
              year1num=parseInt(year1);
              year2=string3+string4;
              year2num=parseInt(year2);
              return [year1,year2];            
        }
    }

最后创建了一个用于加密的查找数组:

    var lookup=[day,month,year1,year2,hour,minute,second];

如果有人可以向我展示一个简短的方法,我将不胜感激。