包含所有ascii字符的字符串

问题描述 投票:0回答:9

我想在 JavaScript 中创建一个包含所有 ascii 字符的字符串。我该怎么做?

javascript string ascii
9个回答
128
投票
const s = ' !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~';

33
投票

我的javascript有点生疏,但是是这样的:

s = '';
for( var i = 32; i <= 126; i++ )
{
    s += String.fromCharCode( i );
}

但不确定范围是否正确。

编辑:
看来应该是32到127。已调整。

编辑2:
由于 char 127 也不是可打印字符,因此我们必须将其范围缩小到 32 <= c <= 126, in stead of 32 <= c <= 127.


6
投票

只需循环字符代码并将每个字符转换为字符:

var s = '';
for (var i=32; i<=127;i++) s += String.fromCharCode(i);

5
投票

只是想把这个放在这里供参考。 (在我的计算机上生成大约需要 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;
})();

最有效的解决方案(如果您确实想在每次脚本运行时生成整个集合,可能是)(在我的计算机上生成大约 3/100-35/100 毫秒)。

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);

.


2
投票

这是用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
通话的 2 条引言。


1
投票

无需进行多次追加:

var s = Array.apply(null, Array(127-32))
  .map(function(x,i) {
    return String.fromCharCode(i+32);
  }).join("");
  document.write(s);


1
投票

这是 ES6 one liner:

asciiChars = Array.from({ length: 95 }, (e, i) => String.fromCharCode(i + 32)).join('');

console.log(asciiChars)


0
投票
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 结束 */ }


-1
投票

这是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)
© www.soinside.com 2019 - 2024. All rights reserved.