F#修剪空字符

Gra*_*mes 4 null f#

我有一个从Web套接字收到的字符串:

let websocket = new ClientWebSocket()
let source = new CancellationTokenSource()
let buffer = ArraySegment(Array.zeroCreate 32)  

do! websocket.ConnectAsync(url, source.Token) 
do! websocket.ReceiveAsync(buffer, source.Token) 

let str = Encoding.ASCII.GetString buffer.Array

let trim1 = Regex.replace str "\0" String.Empty  // result is empty string
let trim2 = Regex.replace str "\\0" String.Empty // result is empty string
let trim3 = str.TrimEnd [| '\\'; '0' |]          // result is untouched
Run Code Online (Sandbox Code Playgroud)

我显然试图削减多余的空字符

在调试器中,str的值为"{\"type \":\"hello \"}\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"

打印时看起来像:{"type":"hello"}这是有道理的,符号正在被正确解释.

我似乎无法在f#中完成这个简单的任务,我做错了什么?

Cha*_*ert 6

使用ASCII转义可以解决问题:

let trim3 = str.TrimEnd [| '\x00' |]
Run Code Online (Sandbox Code Playgroud)

你也可以使用unicode转义序列来逃避它:

let trim3 = str.TrimEnd [| '\u0000' |]  
Run Code Online (Sandbox Code Playgroud)

您的正则表达式版本不起作用,因为在正则表达式中表示空字符的正确方法是使用ASCII转义"\x00",或使用unicode转义"\u0000".