也许这只是极度缺乏睡眠,但我无法弄清楚为什么会这样。我有一个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,我无法确定实际上是多余的角色。似乎没有!
答案 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];
如果有人可以向我展示一个简短的方法,我将不胜感激。