F#修剪空字符

时间:2017-03-24 17:04:50

标签: f# null

我从网络套接字收到了一个字符串:

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

我显然试图修剪多余的空字符

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

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

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

1 个答案:

答案 0 :(得分:6)

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

  
let trim3 = str.TrimEnd [| '\x00' |]

您也可以使用unicode转义序列转义它:

let trim3 = str.TrimEnd [| '\u0000' |]  

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