我想在JavaScript中创建一个包含所有ASCII字符的字符串。我该怎么做?
我想在JavaScript中创建一个包含所有ASCII字符的字符串。我该怎么做?
const s = ' !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~';
我的JavaScript有点生疏,但是像这样:
s = '';
for( var i = 32; i <= 126; i++ )
{
s += String.fromCharCode( i );
}
不确定范围是否正确。
编辑:
看起来应该是32到127。已调整。
编辑2:
由于字符127也不是可打印字符,因此我们必须将其缩小到32 <= c <= 126,而不是32 <= c <= 127。
只需循环字符代码并将每个代码转换为字符:
var s = '';
for (var i=32; i<=127;i++) s += String.fromCharCode(i);
我只是想放在这里作为参考(在我的电脑上需要13/100到26/100毫秒来生成)。
var allAsciiPrintables = JSON.stringify((Array.from(Array(126 + 32).keys()).slice(32).map((item) => {
return String.fromCharCode(item);
})).join(''));
分解:
var allAsciiPrintables = (function() {
/* ArrayIterator */
var result = Array(126 + 32).keys();
/* [0, 126 + 32] */
result = Array.from(result);
/* [32, 126 + 32] */
result = result.slice(32);
/* transform each item from Number to its ASCII as String. */
result = result.map((item) => {
return String.fromCharCode(item);
});
/* convert from array of each string[1] to a single string */
result = result.join('');
/* create an escaped string so you can replace this code with the string
to avoid having to calculate this on each time the program runs */
result = JSON.stringify(result);
/* return the string */
return result;
})();
var allAsciiPrintables = (() => {
var result = new Array(126-32);
for (var i = 32; i <= 126; ++i) {
result[i - 32] = (String.fromCharCode(i));
}
return JSON.stringify(result.join(''));
})();
奇怪的是,使用反引号直接赋值字符串字面量的速度只比直接赋值慢3-10倍(反引号可以告诉JavaScript避免大部分反斜杠解析)。
var x;
var t;
t = performance.now();
x = '!\"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~';
t = performance.now() - t;
console.log(t);
.
这是一个使用Python编写的版本。 将所有ASCII字符按顺序作为单个字符串给出。
all_ascii = ''.join(chr(k) for k in range(128)) # 7 bits
all_chars = ''.join(chr(k) for k in range(256)) # 8 bits
printable_ascii = ''.join(chr(k) for k in range(128) if len(repr(chr(k))) == 3)
>>> print(printable_ascii)
' !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~'
这里的最后一个字符串,printable_ascii
只包含那些不包含转义字符的字符(即长度为1)。像 \x05、\x06
或者 \t、\n
这样在系统字体中没有自己的字形的字符将被过滤掉。
len(repr(chr(k))) == 3
包括来自 repr
调用的两个引号。
不需要进行多个附加操作:
var s = Array.apply(null, Array(127-32))
.map(function(x,i) {
return String.fromCharCode(i+32);
}).join("");
document.write(s);
这里是一个ES6一行代码:
asciiChars = Array.from({ length: 95 }, (e, i) => String.fromCharCode(i + 32)).join('');
console.log(asciiChars)
let str = '';// empty string declear
for( var i = 32; i <= 126; i++ )
{
str = str + String.fromCharCode( i ); /* this method received one integer and
将其转换为 ASCII 字符并使用字符串连接方法逐个存储到 str 变量中。循环从 32 开始,到 126 结束。
这是一个用Coffeescript编写的版本
require 'fluentnode'
all_Ascii = ->
(String.fromCharCode(c) for c in [0..255])
describe 'all Ascii', ->
it 'all_Ascii', ->
all_Ascii.assert_Is_Function()
all_Ascii().assert_Size_Is 256
all_Ascii()[0x41].assert_Is 'A'
all_Ascii()[66 ].assert_Is 'B'
all_Ascii()[50 ].assert_Is '2'
all_Ascii()[150 ].assert_Is String.fromCharCode(150)